Pandas数据框用索引填充空值

时间:2015-08-10 22:10:18

标签: python pandas

我有一个数据框,对于一列,我想用索引值填充空值。这样做的最佳方式是什么?

说我的数据框看起来像这样:

>>> import numpy as np
>>> import pandas as pd
>>> d=pd.DataFrame(index=['A','B','C'], columns=['Num','Name'], data=[[1,'Andrew'], [2, np.nan], [3, 'Chris']])
>>> print d

  Num    Name
A    1  Andrew
B    2     NaN
C    3   Chris

我可以使用以下代码行来获取我正在寻找的内容:

d['Name'][d['Name'].isnull()]=d.index

但是,我收到以下警告:"正在尝试在DataFrame的一个切片副本上设置一个值"

我认为使用fillna或loc更好地做到这一点,但我无法弄清楚如何使用fillna或loc。我尝试过以下方法:

>>> d['Name']=d['Name'].fillna(d.index)

>>> d.loc[d['Name'].isnull()]=d.index

关于哪个是最佳选择的任何建议?

2 个答案:

答案 0 :(得分:4)

IMO您应该使用fillna,因为Index类型不是您传递系列所需的填充值的可接受数据类型。 Index有一个to_series方法:

In [13]:
d=pd.DataFrame(index=['A','B','C'], columns=['Num','Name'], data=[[1,'Andrew'], [2, np.nan], [3, 'Chris']])
d['Name']=d['Name'].fillna(d.index.to_series())
d

Out[13]:
   Num    Name
A    1  Andrew
B    2       B
C    3   Chris

答案 1 :(得分:2)

我会在这种情况下使用.loc

d.loc[d['Name'].isnull(), 'Name'] = d.loc[d['Name'].isnull()].index