熊猫数据框使用索引填充空值

AJG*_*519 5 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
Run Code Online (Sandbox Code Playgroud)

我可以使用以下代码行来获取所需的内容:

d['Name'][d['Name'].isnull()]=d.index
Run Code Online (Sandbox Code Playgroud)

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

我想最好使用fillna或loc来做到这一点,但我不知道如何使用两者来做到这一点。我尝试了以下方法:

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

>>> d.loc[d['Name'].isnull()]=d.index
Run Code Online (Sandbox Code Playgroud)

有什么建议是最好的选择?

小智 5

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

d.loc[d['Name'].isnull(), 'Name'] = d.loc[d['Name'].isnull()].index
Run Code Online (Sandbox Code Playgroud)


EdC*_*ica 5

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
Run Code Online (Sandbox Code Playgroud)