慕標(biāo)琳琳
2021-06-28 12:06:41
為什么 Pandas NaN 值有時輸入為 numpy.float64,有時是浮動的?當(dāng)我想使用函數(shù)并根據(jù)其他列更改數(shù)據(jù)框中的值時,這非常令人困惑例子: 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然后我將此函數(shù)應(yīng)用到 C 列df['C']=df.apply(lambda x: change_val(x),axis=1)事情出了問題df.B==np.nan,我該如何正確表達(dá)?想要的結(jié)果: A B C0 1 NaN d1 2 a a2 2 b b3 3 c c
2 回答

幕布斯6054654
TA貢獻(xiàn)1876條經(jīng)驗 獲得超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
有關(guān)使用缺失數(shù)據(jù)檢查文檔的更多信息。

楊__羊羊
TA貢獻(xiàn)1943條經(jīng)驗 獲得超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
提交
取消