jeremy g
Actualmente tengo un marco de datos que se ve así:
Unnamed: 1 Unnamed: 2 Unnamed: 3 Unnamed: 4
0 Sample Number Group Number Sample Name Group Name
1 1.0 1.0 s_1 g_1
2 2.0 1.0 s_2 g_1
3 3.0 1.0 s_3 g_1
4 4.0 2.0 s_4 g_2
Estoy buscando una manera de eliminar la fila del encabezado y convertir la primera fila en la nueva fila del encabezado, por lo que el nuevo marco de datos se vería así:
Sample Number Group Number Sample Name Group Name
0 1.0 1.0 s_1 g_1
1 2.0 1.0 s_2 g_1
2 3.0 1.0 s_3 g_1
3 4.0 2.0 s_4 g_2
He intentado cosas a lo largo de las líneas de if 'Unnamed' in df.columns:
luego haga el marco de datos sin el encabezado
df.to_csv(newformat, header=False, index=False)
pero parece que no estoy llegando a ninguna parte.
rgalbo
new_header = df.iloc[0] #grab the first row for the header
df = df[1:] #take the data less the header row
df.columns = new_header #set the header row as the df header
-
Cuando hago esto, el índice 0 también se convierte en parte del encabezado. ¿Hay alguna manera de eliminar el índice 0 de mi fila de encabezado?
– Pete
25 de marzo a las 12:14
-
@Pete ¿Cuál es el resultado que obtienes de
df.columns
?– rgalbo
31 de marzo a las 17:21
josecondron
El marco de datos se puede cambiar simplemente haciendo
df.columns = df.iloc[0]
df = df[1:]
Después
df.to_csv(path, index=False)
Debería hacer el truco.
-
Esta es una mejor respuesta, porque no hay código redundante (new_header) en esto.
– Ad Infinito
30 de octubre de 2017 a las 12:01
Si quieres una sola línea, puedes hacer:
df.rename(columns=df.iloc[0]).drop(df.index[0])
-
Hazlo
df.rename(columns=df.iloc[0]).drop(df.index[0]).reset_index(drop=True)
si no desea que a su índice le falte algo.– z33k
2 de noviembre de 2021 a las 12:13
-
funcionó para mí después de convertirlo en dos líneas ‘ df.rename(columns=df.iloc[0, :]inplace=True) df.drop(df.index[0]en el lugar=Verdadero)
– Marc Steffen
16 de noviembre de 2021 a las 22:32
Otro one-liner usando el intercambio de Python:
df, df.columns = df[1:] , df.iloc[0]
Esto no restablecerá el índice.
Aunque, lo contrario no funcionará como se esperaba. df.columns, df = df.iloc[0], df[1:]
GoPackGo
La respuesta de @ostrokach es la mejor. Lo más probable es que desee mantener eso en todas las referencias al marco de datos, por lo que se beneficiaría de inplace = True.
df.rename(columns=df.iloc[0], inplace = True)
df.drop([0], inplace = True)
Alex P Miller
Aquí hay un truco simple que define los índices de columna “en su lugar”. Porque set_index
conjuntos fila índices en su lugar, podemos hacer lo mismo para las columnas al transponer el marco de datos, establecer el índice y volver a transponerlo:
df = df.T.set_index(0).T
Tenga en cuenta que es posible que tenga que cambiar el 0
en set_index(0)
si sus filas ya tienen un índice diferente.
Ransaka Ravihara
Alternativamente, podemos hacer esto cuando leemos un archivo con pandas.
Este caso lo podemos usar,
pd.read_csv('file_path',skiprows=1)
Al leer el archivo, esto omitirá la primera fila y establecerá la columna como la segunda fila del archivo.
-
Esto no resuelve el problema. Se supone que los valores en la segunda fila no son los valores del encabezado. De hecho, esto es básicamente lo contrario de lo que debería ser la solución. Si skiprows=-1 hiciera que la primera fila se usara como encabezado, esa sería la solución. La solución aceptada logra el objetivo.
– Antonio
29 de septiembre de 2021 a las 14:01