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


Estoy leyendo un archivo csv en pandas. Este archivo csv contiene 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, obtengo 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 forma limpia en Python de agregar una fila de encabezado a mi archivo csv / pandas df?


74
2017-12-04 15:35


origen


Respuestas:


Puedes usar names directamente en el read_csv 

nombres: tipo array, por defecto Ninguno Lista de nombres de columnas para usar. Si archivo   no contiene ninguna fila de encabezado, entonces debe pasar explícitamente header = None

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

La línea a continuación no funcionará como esperabas. Cov ya es un marco de datos, suponiendo que realmente tiene 4 columnas cuando se lee desde el archivo.

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

107
2017-12-04 15:43



Alternativamente, podrías leer tu csv con header=None y luego agrégalo con df.columns:

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

54
2017-12-04 17:27



col_Names=["Sequence", "Start", "End", "Coverage"]
my_CSV_File= pd.read_csv("yourCSVFile.csv",names=col_Names)

habiendo hecho esto, simplemente compruébalo con [obviamente yo sé, tú lo sabes. Pero aún...

my_CSV_File.head()

Espero que ayude ... Saludos


4
2018-01-24 03:08



Para arreglar tu código simplemente puedes cambiar [Cov] a Cov.values, el primer parámetro de pd.DataFrame se convertirá en un multidimensional numpy formación:

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 sigue siendo el uso pd.read_excel con header=None y names=columns_list.


1
2018-02-05 06:35