如何使用where填充满足特定条件的NA

时间:2019-09-19 07:31:26

标签: pandas python-2.7

Dataframe named titanic中,如何用满足条件Cabin的值B填充列Pclass==3中的 NA 值?

应该使用where吗?

titanic['Cabin']=titanic.where(titanic.Pclass==3).fillna('B')

也欢迎使用其他方法。

@jezreal:reference

1 个答案:

答案 0 :(得分:2)

示例:

titanic = pd.DataFrame({'Pclass':[1,3,3] * 2,
                         'Cabin':[np.nan] * 2 + ['s','d','f'] + [np.nan]})

您可以按条件选择行以替换丢失的值:

m = titanic.Pclass==3

titanic.loc[m, 'Cabin'] = titanic.loc[m, 'Cabin'].fillna('B')

或者您也可以将两个条件与&链接为按位AND并替换B

titanic.loc[(titanic.Pclass==3) & (titanic.Cabin.isna()), 'Cabin'] = 'B'  

或者用Series.where的解决方案-对于按位!=3,条件用|Series.notnaOR反转:

titanic['Cabin'] = titanic['Cabin'].where((titanic.Pclass!=3) | (titanic.Cabin.notna()), 'B')
print (titanic)
   Pclass Cabin
0       1   NaN
1       3     B
2       3     s
3       1     d
4       3     f
5       3     B