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?


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"])

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"]

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


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.


Cuando damos columnas_lista, ¿podemos agregar valores predeterminados para las columnas seleccionadas?
Chintan Gotecha
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.