3
votes

Comment ajouter un en-tête de colonne, dans la deuxième ligne d'un dataframe pandas?

J'ai une trame de trame de données de pandas et maintenant je veux ajouter des noms de colonnes, mais seulement pour la deuxième ligne. Voici un exemple de ma précédente sortie:

 entrez la description de l'image ici

Résultat souhaité:

 entrez la description de l'image ici

Mon code:

data_line=open("file1.txt", mode="r")

lines=[]
for line in data_line:
    lines.append(line)
for i, line in enumerate(lines):
    # print('{}={}'.format(i+1, line.strip()))
    file1_header=lines[0] 
num_line=1
Dictionary_File1={}
Value_File1= data_type[0:6]
Value_File1_short=[]
i=1
for element in Value_File1:
    type=element.split(',')
    Value_File1_short.append(type[0] + ", " + type[1] + ", " + type[4])
    i += 1
Dictionary_File1[ file1_header]=Value_File1_short
pd_file1=pd.DataFrame.from_dict(Dictionary_File1)


2 commentaires

Pouvez-vous nous montrer précisément votre entrée et la sortie souhaitée via une modifier votre question ?


J'ai déjà édité la question pour afficher la sortie souhaitée


3 Réponses :


1
votes

Vous devriez jeter un œil à DataFrame. read_csv . Le paramètre de mot-clé header vous permet d'indiquer une ligne dans le fichier à utiliser pour les noms d'en-tête.

Vous pourriez probablement le faire avec quelque chose comme:

>>> from io import StringIO # I use python3
>>> import pandas as pd
>>> >>> data = """Type    Type2   Type3
... A           B   C
... 1           2   3
... red     blue    green""" 
>>> # StringIO below allows us to use "data" as input to read_csv
>>> # "sep" keyword is used to indicate how columns are separated in data
>>> df = pd.read_csv(StringIO(data), header=1, sep='\s+')
>>> df
     A     B      C
0    1     2      3
1  red  blue  green

Depuis mon shell python, je l'ai testé avec:

pd.read_csv("file1.txt", header=1)


0 commentaires

0
votes

Donc, si je comprends bien, vous avez un fichier "file.txt" contenant vos données, et une liste contenant les types de vos données. Vous souhaitez ajouter la liste des types, aux pandas.DataFrame de vos données. Correct?

Si tel est le cas, vous pouvez lire les données du fichier txt dans un pandas.df en utilisant pandas.read_csv (), puis définir les en-têtes de colonnes en utilisant df.columns.

Cela ressemblerait donc à quelque chose comme: df = pd.read_csv ("file1.txt", en-tête = Aucun) df.columns = data_type [0: 6]

J'espère que cela vous aidera! Acclamations


0 commentaires

0
votes

Vous pouvez écrire une ligne en utilisant le module csv avant d'écrire votre dataframe dans le même fichier. Notez que cela n'aidera pas lors de la relecture de Pandas, qui ne fonctionne pas avec les "en-têtes en double". Vous pouvez créer des colonnes MultiIndex , mais ce n'est pas nécessaire pour la sortie souhaitée.

import pandas as pd
import csv
from io import StringIO

# input file
x = """A,B,C
1,2,3
red,blue,green"""

# replace StringIO(x) with 'file.txt'
df = pd.read_csv(StringIO(x))

with open('file.txt', 'w', newline='') as fout:
    writer = csv.writer(fout)
    writer.writerow(['Type', 'Type2', 'Type3'])
    df.to_csv(fout, index=False)

# read file to check output is correct
df = pd.read_csv('file.txt')

print(df)

#   Type Type2  Type3
# 0    A     B      C
# 1    1     2      3
# 2  red  blue  green


0 commentaires