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?

sequence_hard
quelle
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"])
Leb
quelle
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"]
Anton Protopopov
quelle
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

Bhardwaj Joshi
quelle
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.

romulomadu
quelle
Können wir bei der Angabe von columns_list Standardwerte für ausgewählte Spalten hinzufügen?
Chintan Gotecha