将Pandas DataFrame的行转换为列标题,
问题内容:
我必须使用的数据有点混乱。它的数据中包含标头名称。如何从现有的pandas数据框中选择一行并使其(重命名为)列标题?
我想做类似的事情:
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
将列标签设置为等于第二行(索引位置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])
将删除 所有
具有与第二行相同标签的行。因为非唯一索引可能会导致像这样的绊脚石(或潜在的错误),所以通常最好注意索引的唯一性(即使Pandas不需要它)。