将Pandas DataFrame的行转换为列标题,

时间:2014-10-01 17:33:44

标签: python pandas rename dataframe

我必须处理的数据有点乱。它的数据中包含标题名称。如何从现有的pandas数据框中选择一行并将其(重命名为)列标题?

我想做类似的事情:

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

df.columns = header

5 个答案:

答案 0 :(得分:124)

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

将列标签设置为等于第2行(索引位置1)中的值:

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

放下第二行:

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

答案 1 :(得分:33)

这有效(pandas v'0.19.2'):

<span class="class1 class2">

答案 2 :(得分:3)

重新创建数据框会更容易。 这也会从头开始解释列的类型。

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

答案 3 :(得分:1)

要在不重新分配df的情况下重命名标头,请执行以下操作:

df.rename(columns=df.iloc[0], inplace = True)

要删除该行而不重新分配df:

df.drop(df.index[0], inplace = True)

答案 4 :(得分:0)

您可以通过read_csv参数(代表 read_html )在headerRow number(s) to use as the column names, and the start of the data构造函数中指定行索引。这样做的好处是可以自动删除所有先前被认为是垃圾的行。

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