So fügen Sie einem Pandas DataFrame eine Kopfzeile hinzu


165

Ich lese eine CSV-Datei in pandas. Diese CSV-Datei besteht aus vier Spalten und einigen Zeilen, hat jedoch keine Kopfzeile, die ich hinzufügen möchte. Ich habe Folgendes versucht:

Cov = pd.read_csv("path/to/file.txt", sep='\t')
Frame=pd.DataFrame([Cov], columns = ["Sequence", "Start", "End", "Coverage"])
Frame.to_csv("path/to/file.txt", sep='\t')

Wenn ich den Code anwende, wird der folgende Fehler angezeigt:

ValueError: Shape of passed values is (1, 1), indices imply (4, 1)

Was genau bedeutet der Fehler? Und was wäre eine saubere Möglichkeit in Python, meiner CSV-Datei / pandas df eine Kopfzeile hinzuzufügen?


Hier ist eine andere Interpretation Ihrer Frage: Fügen Sie einem vorhandenen Datenrahmen einen weiteren Header hinzu, um einen MultiIndex zu erstellen.
cs95

Antworten:


257

Sie können namesdirekt in der verwendenread_csv

Namen: Array-ähnlich, Standard Keine Liste der zu verwendenden Spaltennamen. Wenn die Datei keine Kopfzeile enthält, sollten Sie den Kopf = Keine explizit übergeben

Cov = pd.read_csv("path/to/file.txt", 
                  sep='\t', 
                  names=["Sequence", "Start", "End", "Coverage"])

9
Du wirst lachen. Ich habe es tatsächlich versucht, war mir aber nicht bewusst, dass Sie die eckigen Klammern um die Namen setzen müssen. Welches ist logisch im Nachhinein. Danke dir!
sequence_hard

Keine Sorge, wir haben alle diese dummen Fehler gemacht. Ich bin auch schuld an ihnen.
Leb

@Leb, ich hatte genau das gleiche Problem und habe deine Lösung ausprobiert. Ich habe die Überschriften für die Tabelle erhalten, aber die erste Zeile wurde auch durch dieselben Überschriften ersetzt. Was soll ich jetzt machen?
007mrviper

Es fügt meinen Daten mehr Spalten hinzu, alle mit NaNAttributen. Es war, weil mein Trennzeichen ein leerer Raum ist.
SalahAdDin

127

Alternativ können Sie Ihre CSV mit lesen header=Noneund dann hinzufügen mit df.columns:

Cov = pd.read_csv("path/to/file.txt", sep='\t', header=None)
Cov.columns = ["Sequence", "Start", "End", "Coverage"]

15
col_Names=["Sequence", "Start", "End", "Coverage"]
my_CSV_File= pd.read_csv("yourCSVFile.csv",names=col_Names)

Nachdem Sie dies getan haben, überprüfen Sie es einfach mit [nun, offensichtlich weiß ich, dass Sie das wissen. Aber dennoch...

my_CSV_File.head()

Hoffe es hilft ... Prost


Bitte formatieren Sie Ihren Code mit der {}Schaltfläche. Einrückung ist wichtig.
Herr T

7

Um Ihren Code zu reparieren, zu dem Sie einfach wechseln können [Cov], Cov.valueswird der erste Parameter von pd.DataFramezu einem mehrdimensionalen numpyArray:

Cov = pd.read_csv("path/to/file.txt", sep='\t')
Frame=pd.DataFrame(Cov.values, columns = ["Sequence", "Start", "End", "Coverage"])
Frame.to_csv("path/to/file.txt", sep='\t')

Die intelligenteste Lösung ist jedoch immer noch die Verwendung pd.read_excelmit header=Noneund names=columns_list.


Können wir bei der Angabe von columns_list Standardwerte für ausgewählte Spalten hinzufügen?
Chintan Gotecha
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.