為什么我不能在下面的串列理解中使用 np.isnan() 檢測資料中的 np.nan 值?串列理解是否以某種方式轉換了值的型別?
data = pd.DataFrame({'col':['a', 'b', np.nan]})
[print('NaN') if np.isnan(i) else print('Not NaN') for i in data.col]
uj5u.com熱心網友回復:
np.isnan()是的,由于列中的混合型別,您會遇到麻煩。來自熊貓的檔案
因為 NaN 是一個浮點數,所以即使有一個缺失值的整數列也會轉換為浮點 dtype(有關更多資訊,請參閱對整數 NA 的支持)
因此,您應該考慮,正如@saeedghadiri 建議的那樣pd.isna():
[print('NaN') if pd.isna(i) else print('Not NaN') for i in data.col]
uj5u.com熱心網友回復:
如果我們仔細查看您的代碼,則 col 為 3 個值'a','b'和np.nan. 前兩個是字串,第三個是 np.float。
但是,np.isnan不是為字串型別設計的,那么它就會崩潰。以下將起作用
data = pd.DataFrame({'col':[1, 2, np.nan]})
[print('NaN') if np.isnan(i) else print('Not NaN') for i in data.col]
如果要區分np.nan所有物件型別,則應pd.isna改為使用。
uj5u.com熱心網友回復:
我更喜歡pd.isna每次都用于檢查 nans。因此,您的代碼更改為:
[print('NaN') if pd.isna(i) else print('Not NaN') for i in data.col]
輸出將是:
Not NaN
Not NaN
NaN
uj5u.com熱心網友回復:
如這里的答案所述,您必須使用pd.isnull(i)而不是np.isnan(i),因為該函式np.isnan()不適用于str型別。
[print('NaN') if pd.isnull(i) else print('Not NaN') for i in data.col]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/530648.html
標籤:Python麻木的
