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:
Résultat souhaité:
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)
3 Réponses :
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)
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
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
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