Los datos que tengo que trabajar es un poco desordenado.. tiene los nombres de encabezado en el interior de sus datos. ¿Cómo puedo elegir una fila a partir de una pandas dataframe y hacer (cambiar el nombre de a) un encabezado de columna?

Quiero hacer algo como:

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

df.columns = header
InformationsquelleAutor E.K. | 2014-10-01

4 Comentarios

  1. 135
    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

    Conjunto de la columna de las etiquetas a la igualdad de los valores de la 2ª fila (índice 1):

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

    Caída de la 2ª fila:

    In [24]: df.reindex(df.index.drop(1))
    Out[24]: 
    1 foo bar baz
    0   1   2   3
    2   4   5   6
    • Muchas gracias por tu rápida respuesta! ¿Cómo puedo elegir una fila por valor en el lugar de ubicación de índice para hacer de cabecera? Así, por su ejemplo algo como.. df.columnas = df[df[0] == ‘foo’]
    • El problema con eso es que podría haber más de una fila que tiene el valor "foo". Una forma de evitar este problema es elegir explícitamente dicha primera fila: df.columns = df.iloc[np.where(df[0] == 'foo')[0][0]].
    • Ah ya veo por qué se hizo de esa manera. En mi caso, sé que sólo hay una fila que tiene el valor «foo». Entonces está bien. Lo hice de esta manera supongo que es la misma que la que me dio anteriormente. idx_loc = df[df[0] == ‘foo’].índice.tolist()[0] df.columnas = df.iloc[idx_loc]
  2. 36

    Esto funciona (pandas v’0.19.2′):

    df.rename(columns=df.iloc[0])
    • Se puede quitar el «encabezado de la fila por la adición de .drop(df.index[0])
    • Me gusta esta mejor que el real aceptado respuesta. Me encanta el corto oneline soluciones.
  3. 3

    Sería más fácil recrear el marco de datos.
    Esto también interpretar las columnas de tipos a partir de cero.

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

    Puede especificar el índice de fila en el read_csv o read_html constructores a través de la encabezado parámetro que representa número de Fila(s) que desea utilizar como nombres de columna, y el inicio de los datos. Esto tiene la ventaja de que automáticamente soltar 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

Dejar respuesta

Please enter your comment!
Please enter your name here