我有一个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。是否有可能这样,所以我不需要使用我所说的部分解决方案?
答案 0 :(得分:4)
在过滤器前更改为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