Convertir fila a encabezado de columna para Pandas DataFrame,

Los datos con los que tengo que trabajar son un poco desordenados. Tiene nombres de encabezados dentro de sus datos. ¿Cómo puedo elegir una fila de un dataframe de pandas existente y convertirla (renombrarla) en un encabezado de columna?

Quiero hacer algo como:

header = df[df['old_header_name1'] == 'new_header_name1'] df.columns = header 

 In [21]: df = pd.DataFrame([(1,2,3), ('foo','bar','baz'), (4,5,6)]) In [22]: df Out[22]: 0 1 2 0 1 2 3 1 foo bar baz 2 4 5 6 

Establezca las tags de columna para igualar los valores en la segunda fila (ubicación de índice 1):

 In [23]: df.columns = df.iloc[1] 

Suelta la segunda fila:

 In [24]: df.reindex(df.index.drop(1)) Out[24]: 1 foo bar baz 0 1 2 3 2 4 5 6 

Esto funciona (pandas v’0.19.2 ‘):

 df.rename(columns=df.iloc[0]) 

Sería más fácil recrear el dataframe. Esto también interpretaría los tipos de columnas desde cero.

 headers = df.iloc[0] new_df = pd.DataFrame(df.values[1:], columns=headers) 

Puede especificar el índice de fila en los constructores read_csv o read_html a través del parámetro de header que representa el Row number(s) to use as the column names, and the start of the data . Esto tiene la ventaja de eliminar automáticamente todas las filas anteriores que supuestamente son basura.

 import pandas as pd from io import StringIO In[1] csv = '''junk1, junk2, junk3, junk4, junk5 junk1, junk2, junk3, junk4, junk5 35, 40, 25, 19, 33 40, 50, 61, 72, 85 ''' df = pd.read_csv(StringIO(csv), header=2) print(df) Out[1] 35 40 25 19 33 0 40 50 61 72 85