Pandas Dataframe删除行并设置列名

时间:2016-06-28 12:32:19

标签: python pandas dataframe

我有一个像这样的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.droppd.set_index()等,但我无法弄清楚如何做到这一点。有人可以帮帮我吗?

2 个答案:

答案 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的headerskiprows等参数从一开始就正确地读取数据会更有效率。 c函数

答案 1 :(得分:1)

ilocreset_indexrename_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