Cómo agregar una fila de encabezado a un DataFrame de pandas

166

Estoy leyendo un archivo csv en pandas. Este archivo csv consta de cuatro columnas y algunas filas, pero no tiene una fila de encabezado, que quiero agregar. He estado intentando lo siguiente:

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

Pero cuando aplico el código, aparece el siguiente error:

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

¿Qué significa exactamente el error? ¿Y cuál sería una manera limpia en python de agregar una fila de encabezado a mi archivo csv / pandas df?

secuencia_dura
fuente
Aquí hay una interpretación diferente de su pregunta: Agregue otro encabezado a un Marco de datos existente para crear un MultiIndex.
cs95

Respuestas:

257

Puedes usar namesdirectamente en elread_csv

nombres: tipo matriz, por defecto Ninguno Lista de nombres de columna para usar. Si el archivo no contiene una fila de encabezado, entonces debe pasar explícitamente encabezado = Ninguno

Cov = pd.read_csv("path/to/file.txt", 
                  sep='\t', 
                  names=["Sequence", "Start", "End", "Coverage"])
Leb
fuente
9
Vas a reir. Realmente intenté esto, pero no sabía que hay que poner los corchetes alrededor de los nombres. Lo cual es lógicamente en retrospectiva. ¡Gracias!
secuencia_duro
No se preocupe, todos hemos cometido esos errores tontos. Soy culpable de ellos también.
Leb
@Leb, tuve exactamente el mismo problema y probé tu solución. Obtuve los encabezados de la tabla, pero la primera fila también fue reemplazada por los mismos nombres de encabezado. ¿Qué debo hacer ahora?
007mrviper
agrega más columnas a mis datos, todos con NaNatributos. Fue porque mi separador es un espacio vacío.
SalahAdDin
128

Alternativamente, podría leer su csv con header=Noney luego agregarlo con df.columns:

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

Habiendo hecho esto, simplemente verifíquelo con [bueno, obviamente lo sé, lo sabe. Pero aún...

my_CSV_File.head()

Espero que ayude ... Saludos

Bhardwaj Joshi
fuente
Por favor formatee su código con el {}botón. La sangría importa.
Sr. T
7

Para solucionar su código puede simplemente cambiar [Cov]a Cov.values, el primer parámetro de pd.DataFramese convertirá en un multi-dimensional 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')

Pero la solución más inteligente todavía es usar pd.read_excelcon header=Noney names=columns_list.

romulomadu
fuente
Cuando damos columnas_lista, ¿podemos agregar valores predeterminados para las columnas seleccionadas?
Chintan Gotecha