Come aggiungere una riga di intestazione a un DataFrame Panda


166

Sto leggendo un file CSV in pandas. Questo file CSV è composto da quattro colonne e alcune righe, ma non ha una riga di intestazione, che voglio aggiungere. Ho provato quanto segue:

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

Ma quando applico il codice, ottengo il seguente errore:

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

Cosa significa esattamente l'errore? E quale sarebbe un modo semplice in Python per aggiungere una riga di intestazione al mio file CSV / Panda Panda?


Ecco una diversa interpretazione della tua domanda: aggiungi un'altra intestazione a un Dataframe esistente per creare un MultiIndex.
cs95,

Risposte:


257

È possibile utilizzare namesdirettamente inread_csv

names: array-like, default Nessuno Elenco di nomi di colonne da utilizzare. Se il file non contiene righe di intestazione, è necessario passare esplicitamente header = None

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

9
Riderai. In realtà ci ho provato, ma non ero a conoscenza del fatto che devi mettere le parentesi quadre attorno ai nomi. Che è logicamente in retrospettiva. Grazie!
sequenza_hard

Non preoccuparti, abbiamo fatto tutti quegli sciocchi errori. Sono colpevole anche di loro.
Leb

@Leb, ho avuto esattamente lo stesso problema e ho provato la tua soluzione. Ho ottenuto le intestazioni per la tabella ma anche la prima riga è stata sostituita dagli stessi nomi di intestazione. Che shold faccio adesso?
007mrviper,

aggiunge più colonne ai miei dati, tutte con NaNattributi. È stato perché il mio separatore è uno spazio vuoto.
SalahAdDin

128

In alternativa puoi leggere CSV con header=Nonee quindi aggiungerlo con 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)

dopo averlo fatto, basta controllarlo con [beh ovviamente lo so, lo sai. Ma comunque ...

my_CSV_File.head()

Spero che aiuti ... Saluti


Si prega di formattare il codice con il {}pulsante. Il rientro è importante.
Mr. T

7

Per risolvere il tuo codice è possibile semplicemente cambiare [Cov]a Cov.values, il primo parametro di pd.DataFramediventerà una multi-dimensionale 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')

Ma la soluzione più intelligente è ancora in uso pd.read_excelcon header=Nonee names=columns_list.


Quando forniamo colonne_elenco, possiamo aggiungere valori predefiniti per le colonne selezionate?
Chintan Gotecha,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.