我有一个 pandas DataFrame,我需要根据过滤器将某些值替换为 NaN。这样做时,我正面临数据类型的变化。如何避免这种数据类型转换?

玩具示例代码

import pandas as pd
import numpy as np
df = pd.Series([False, True, False, True])
filter = pd.Series([True, True, False, False])
df[filter] = np.nan

我希望 df 也有 TrueFalse 值,来自 NaN 。然而,True 值被转换为 1,False 值被转换为 0,如下面的输出所示。
>>> df
0    NaN
1    NaN
2    0.0
3    1.0
dtype: float64

部分解决方案

我现在能想到的只有部分解决方案如下:
df[df==1] = True
df[df==0] = False
print df

结果是:
>>> df
0      NaN
1      NaN
2    False
3     True
dtype: object

问题

我知道,如果我检查一个值是否为 1 并与 True 进行比较,它会解析为 True,并且在 0 和 False 之间也会发生同样的情况。但是,当我将任何值转换为 True 时,我想避免将我的值 FalseNaN 分别更改为 0 和 1 。这是可能的,所以我不需要使用我所说的部分解决方案吗?

最佳答案

过滤前改为 object

df = pd.Series([False, True, False, True])
filter = pd.Series([True, True, False, False])
df=df.astype('object')
df[filter] = np.nan
df
Out[623]:
0      NaN
1      NaN
2    False
3     True
dtype: object

更多信息
df.apply(type)
Out[625]:
0    <class 'float'>
1    <class 'float'>
2     <class 'bool'>
3     <class 'bool'>
dtype: object

关于python - 将某些值替换为 Pandas DataFrame 中的 NaN 时,如何避免数据类型转换?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52103935/

10-13 00:02