我下面有一個 DataFrame,它有一些缺失值。
df = pd.DataFrame(data=[['A', 1, None], ['B', 2, 5]],
columns=['X', 'Y', 'Z'])
由于df['Z']應該是整數列,因此我將其資料型別更改為pandas新的實驗型別可空整數,如下所示。
ydf['Z'] = ydf['Z'].astype(pd.Int32Dtype())
ydf
X Y Z
0 A 1 <NA>
1 B 2 5
現在我正在嘗試使用一個簡單的numpywhere 方法,使用下面的代碼將列中的非空值替換df['Z']為固定整數值(例如1)。
np.where(pd.isna(ydf['Z']), pd.NA, np.where(ydf['Z'] > 0, 1, 0))
但是我收到以下錯誤,我無法理解原因,因為我已經在第一個條件中檢查具有空值的行。
TypeError: boolean value of NA is ambiguous
uj5u.com熱心網友回復:
np.where需要一個布爾陣列。使用int64dtype,在nans>的 Series 回傳值上False使用。使用Int32dtype(注意大寫I),>不會將 nans 強制為 False,從而導致錯誤。
一種解決方案是使用ydf['Z'].gt(0).fillna(False)而不是ydf['Z'] > 0. (它們是相同的,第二個只是將 NA 更改為 False):
np.where(pd.isna(ydf['Z']), pd.NA, np.where(ydf['Z'].gt(0).fillna(False), 1, 0))
uj5u.com熱心網友回復:
正如@user17242583 所建議的,只np.where需要一個布林值陣列,但您的比較回傳一個三態陣列:True,False和<NA>。
>>> df['Z'] > 0
0 <NA>
1 True
Name: Z, dtype: boolean
在這種情況下,np.where無法決定是否應將回傳值解釋為Trueor False。
只需即時投射您的專欄:
>>> np.where(pd.isna(df['Z']), pd.NA, np.where(df['Z'].astype(float) > 0, 1, 0))
array([<NA>, 1], dtype=object)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/368016.html
下一篇:迭代行,并執行加法
