我有一个像这样的pandas数据框:
1 2 3
0
NaN ingr contr count
2.0 water 0.02 275
3.0 oil 0.23 11
.....
我想把它转移到这个:
ingr contr count
water 0.02 275
oil 0.23 11
....
我尝试使用pd.drop
和pd.set_index()
等,但我无法弄清楚如何做到这一点。有人可以帮帮我吗?
答案 0 :(得分:1)
尝试iloc索引器:
In [66]: df
Out[66]:
1 2 3
NaN ingr contr count
2.0 water 0.02 275
3.0 oil 0.23 11
In [67]: df.columns = df.iloc[0]
In [68]: df = df.iloc[1:].reset_index()
In [69]: df
Out[69]:
nan index ingr contr count
0 2.0 water 0.02 275
1 3.0 oil 0.23 11
PS但是使用read_csv() / read_excel / read_table / et的header
,skiprows
等参数从一开始就正确地读取数据会更有效率。 c函数
答案 1 :(得分:1)
将iloc
与reset_index
和rename_axis
一起使用(pandas
0.18.0
中的新内容):
df.columns = df.iloc[0,:]
print (df.iloc[1:,:].reset_index().rename_axis(None, axis=1))
0 ingr contr count
0 2.0 water 0.02 275
1 3.0 oil 0.23 11
如果不需要旧的索引添加参数drop=True
:
df.columns = df.iloc[0,:]
print (df.iloc[1:,:].reset_index(drop=True).rename_axis(None, axis=1))
ingr contr count
0 water 0.02 275
1 oil 0.23 11
如果您需要使用第一列作为索引,请使用set_index
:
df.columns = df.iloc[0,:]
print (df.iloc[1:,:].set_index('ingr').rename_axis(None, axis=1).rename_axis(None))
contr count
water 0.02 275
oil 0.23 11