为什么 Pandas NaN 值有时输入为 numpy.float64,有时是浮动的?当我想使用函数并根据其他列更改数据框中的值时,这非常令人困惑例子: A B C0 1 NaN d1 2 a s2 2 b s3 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 C0 1 NaN d1 2 a a2 2 b b3 3 c c
2 回答

幕布斯6054654
TA贡献1876条经验 获得超7个赞
使用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
有关使用缺失数据检查文档的更多信息。

杨__羊羊
TA贡献1943条经验 获得超7个赞
def change_val(df):
if df.A==1 and pd.isnull(df.B):
return df.C
else:
return df.B
NaN 是无值将不等于任何值,甚至不等于 Nan 本身,因此使用 isnull()/isna()
添加回答
举报
0/150
提交
取消