it-swarm.com.de

Hinzufügen einer Kopfzeile zu einem pandas DataFrame

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

Aber wenn ich den Code anwende, erhalte ich den folgenden Fehler:

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

Was genau bedeutet der Fehler? Und was wäre eine saubere Methode in python, um meiner csv-Datei/pandas df eine Kopfzeile hinzuzufügen?

120
sequence_hard

Sie können names direkt in read_csv verwenden

names: array-like, default None Liste der zu verwendenden Spaltennamen. Wenn die Datei keine Kopfzeile enthält, sollten Sie header = None explizit übergeben

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

Alternativ können Sie Ihre CSV-Datei mit header=None lesen und dann mit df.columns hinzufügen:

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

wenn Sie dies getan haben, überprüfen Sie es einfach mit. Aber dennoch...

my_CSV_File.head()

Hoffe es hilft ... Prost

9
Bhardwaj Joshi

Um Ihren Code zu korrigieren, können Sie einfach [Cov] in Cov.values ändern. Der erste Parameter von pd.DataFrame wird zu einem mehrdimensionalen numpy Array:

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 intelligenteste Lösung ist immer noch, pd.read_Excel mit header=None und names=columns_list zu verwenden.

5
romulomadu

Wie füge ich eine Kopfzeile zu einem pandas DataFrame hinzu?

Es sind zwei Fälle zu berücksichtigen:

  1. Der DataFrame hat keine Header oder
  2. Der DataFrame verfügt bereits über eine Kopfzeile, Sie möchten dieser jedoch eine weitere Ebene hinzufügen

Wenn Sie einen DataFrame ohne Header haben und diese Daten NICHT aus einer CSV stammen, weisen Sie einfach das .columns -Attribut zu:

df.columns = ['x', 'y', 'z']

Wenn die Daten aus CSV/Excel stammen, können Sie das names -Attribut wie beschrieben verwenden hier .

df = pd.read_csv('file.csv', header=None, names=['x', 'y', 'z'])

Wenn Sie bereits einen DataFrame mit Headern zur Hand haben und eine weitere Ebene anhängen an Ihre Header, um ein MultiIndex zu erstellen, können Sie Folgendes verwenden:

# Setup
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
df

   A  B
0  1  4
1  2  5
2  3  6
new_level = ['C', 'D']
df.columns = [new_level, df.columns]
# Similar to,
# df.columns = pd.MultiIndex.from_arrays([new_level, df.columns])

df

   C  D
   A  B
0  1  4
1  2  5
2  3  6

df.columns
MultiIndex(levels=[['C', 'D'], ['A', 'B']],
           codes=[[0, 1], [0, 1]])

Wenn Sie alternativ einen einzelnen Header hinzufügen möchten (z. B. "foo"), verwenden Sie stattdessen from_product (dies ist einfacher):

df.columns = pd.MultiIndex.from_product([['foo'], df.columns])
df

  foo   
    A  B
0   1  4
1   2  5
2   3  6

Beachten Sie, dass beim Speichern in CSV über jeder Spalte "foo" angezeigt wird:

df.to_csv('file.csv', index=False)
!cat file.csv

foo,foo
A,B
1,4
2,5
3,6
1
cs95