为什么熊猫NaN值有时会键入numpy.float64,有时会浮动? 当我想使用函数并根据其他列更改数据框中的值时,这真令人困惑
示例:
A B C
0 1 NaN d
1 2 a s
2 2 b s
3 3 c NaN
我有一个def来更改C列的值
def change_val(df):
if df.A==1 and df.B==np.nan:
return df.C
else:
return df.B
然后我将此功能应用于C列
df['C']=df.apply(lambda x: change_val(x),axis=1)
df.B==np.nan
出问题了,请问我该如何正确表达?
所需结果:
A B C
0 1 NaN d
1 2 a a
2 2 b b
3 3 c c
答案 0 :(得分:2)
使用numpy.where
或loc
,使用特殊功能Series.isna
来检查缺失值:
mask = (df.A==1) & (df.B.isna())
#oldier pandas versions
#mask = (df.A==1) & (df.B.isnull())
df['C'] = np.where(mask, df.C, df.B)
或者:
df.loc[~mask, 'C'] = df.B
print (df)
A B C
0 1 NaN d
1 2 a a
2 2 b b
3 3 c c
有关处理丢失的数据的更多信息,请检查docs。
答案 1 :(得分:0)
def change_val(df):
if df.A==1 and pd.isnull(df.B):
return df.C
else:
return df.B
NaN是没有值,甚至是Nan也不会等于任何值,因此请使用isull()/ isna()