python - Pandas .loc[] 副作用将 bools 更改为 floats

标签 python pandas numpy nan

df = pd.DataFrame({'b':[False,True,False,True,False]})

# changes all False values to NaN
df.loc[~df['b'], 'b'] = np.nan

print(df.to_dict())
# {'b': {0: nan, 1: 1.0, 2: nan, 3: 1.0, 4: nan}}

由于 loc 仅更改列中的特定值,因此我期望类似 {'b': {0: nan, 1: True, 2: nan, 3: True, 4: nan}},事实并非如此。为什么 .loc 将 bool 值更改为 float ,对此有什么好的解决方法?

最佳答案

Python、NumPy、Pandas 中的bool 类型只能为True 或False。它不能是 NaN。因此,当您将 NaN 值引入 bool(或 int)系列时,它会变为 float

一种替代方法是使用第二个 bool 列来指示 NaN 值。另一种是使用 NumPy“屏蔽数组”。第三种可能是将列类型更改为 i1 并使用 -1 来指示 NaN。

关于python - Pandas .loc[] 副作用将 bools 更改为 floats,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51326825/

相关文章:

python - Bokeh 小部件 - 工作复选框组示例

python - 提示输入密码时如何使用 paramiko ssh?

Python pandas 更改数据框值

python - numpy通过任意轴 reshape 多维数组

python - 用结构重建我的波形文件

python - 当另一列包含该子字符串时,Pandas 会删除列中字符串的子字符串

Python- Pandas : select first observation per group

numpy - 在 Matplotlib 中更改 clabel 的文本

python - 矩阵所有行对的相关系数和 p 值

python - 根据具有相同长度的其他数组重复数组的元素?像 numpy 的 repelem