将 Pandas DataFrame 的行转换为列标题

问题描述 投票:0回答:6

我必须使用的数据有点混乱..它的数据内部有标题名称。如何从现有的 pandas 数据框中选择一行并将其(重命名为)列标题?

我想做这样的事情:

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

df.columns = header
python pandas rename dataframe
6个回答
308
投票
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

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

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

如果索引具有唯一标签,您可以使用以下方法删除第二行:

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

如果索引不唯一,您可以使用:

In [133]: df.iloc[pd.RangeIndex(len(df)).drop(1)]
Out[133]: 
1 foo bar baz
0   1   2   3
2   4   5   6

使用

df.drop(df.index[1])
删除与第二行具有相同标签的 all 行。因为非唯一索引可能会导致像这样的绊脚石(或潜在的错误),所以通常最好注意索引是唯一的(即使 Pandas 不需要它)。


122
投票

这有效(pandas v'0.19.2'):

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

40
投票

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

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

20
投票

要重命名标头而不重新分配 df:

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

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

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

6
投票

您可以通过代表 header

Row number(s) to use as the column names, and the start of the data 参数在
read_csv
read_html
构造函数中指定行索引。这样做的优点是自动删除前面所有被认为是垃圾的行。

import pandas as pd
from io import StringIO

In[1]
    csv = '''junk1, junk2, junk3, junk4, junk5
    junk1, junk2, junk3, junk4, junk5
    pears, apples, lemons, plums, other
    40, 50, 61, 72, 85
    '''

    df = pd.read_csv(StringIO(csv), header=2)
    print(df)

Out[1]
       pears   apples   lemons   plums   other
    0     40       50       61      72      85

0
投票

保持 Python 简单

Padas DataFrames

columns
属性为什么不将它与标准 Python 一起使用,它更清楚你在做什么:

table = [['name', 'Rf', 'Rg', 'Rf,skin', 'CRI'],
 ['testsala.cxf', '86', '95', '92', '87'],
 ['testsala.cxf: 727037 lm', '86', '95', '92', '87'],
 ['630.cxf', '18', '8', '11', '18'],
 ['Huawei stk-lx1.cxf', '86', '96', '88', '83'],
 ['dedo uv no filtro.cxf', '52', '93', '48', '58']]

import pandas as pd
data = pd.DataFrame(table[1:],columns=table[0])

或者在这种情况下不是第一行,而是第十行:

columns = table.pop(10)
data = pd.DataFrame(table,columns=columns)
© www.soinside.com 2019 - 2024. All rights reserved.