【发布时间】:2022-01-03 04:21:04
【问题描述】:
我有一个 DataFrame 下面有一些缺失值。
df = pd.DataFrame(data=[['A', 1, None], ['B', 2, 5]],
columns=['X', 'Y', 'Z'])
由于df['Z']应该是一个整数列,我将其数据类型更改为pandas新实验类型nullable integer如下。
ydf['Z'] = ydf['Z'].astype(pd.Int32Dtype())
ydf
X Y Z
0 A 1 <NA>
1 B 2 5
现在我正在尝试使用简单的numpy where 方法使用下面的代码将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
【问题讨论】:
-
np.where(ydf['Z'] > 0, 1, 0)抛出错误。 -
是的,我知道,但为什么呢?
-
我认为
np.where只需要一个布尔数组,但ydf['Z'] > 0返回像<NA>这样的 nans -
是的,
df['Z'] > 0(其中df是原始 df,在将其转换为新的 Int32 类型之前)为 nan 返回False。 -
明白。这就说得通了。谢谢。
标签: python pandas numpy boolean missing-data