我有一个 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 也有
True
和 False
值,来自 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
时,我想避免将我的值 False
和 NaN
分别更改为 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/