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/