2015-12-04 23 views
50

hinzufügen Ich lese eine CSV-Datei in pandas. Diese CSV-Datei besteht aus vier Spalten und einigen Zeilen, hat aber keine Kopfzeile, die ich hinzufügen möchte. Ich habe versucht, die folgenden:Wie Kopfzeile zu einem Pandas DataFrame

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') 

Aber wenn ich den Code anwenden, bekomme ich folgende Fehler:

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

Was genau macht der Fehler bedeuten? Und was wäre eine saubere Art in Python, eine Headerzeile zu meiner CSV-Datei hinzuzufügen/Pandas df?

Antwort

84

können Sie names direkt im read_csv

names : array-like, default None List of column names to use. If file contains no header row, then you should explicitly pass header=None

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

verwenden Die folgende Zeile wird nicht funktionieren, wie Sie es erwarten. Cov ist bereits ein Datenrahmen, vorausgesetzt, es hat wirklich 4 Spalten, wenn es aus der Datei gelesen wird.

Frame=pd.DataFrame([Cov], columns = ["Sequence", "Start", "End", "Coverage"]) 
+4

Sie werden lachen. Ich habe es tatsächlich versucht, aber ich wusste nicht, dass Sie die eckigen Klammern um die Namen setzen müssen. Was im Nachhinein logisch ist. Vielen Dank! –

+0

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

41

Alternativ können Sie Sie mit header=None csv lesen und fügen Sie dann mit df.columns:

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

dies getan zu haben, überprüfen Sie es nur mit [offensichtlich gut weiß ich, u wissen. Aber trotzdem ...

my_CSV_File.head() 

Hoffe, es hilft ... Prost

+0

Bitte formatieren Sie Ihren Code mit dem '{}' Knopf. Indentation Angelegenheiten. – MrT

0

Code zu beheben Sie einfach [Cov]-Cov.values ändern können, der erste Parameter von pd.DataFrame wird ein mehrdimensionales numpy Array werden:

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') 

Aber die klügste Lösung ist noch pd.read_excel mit header=None und names=columns_list verwenden.