在熊猫DataFrame中将某些值替换为NaN时,如何避免数据类型转换?

时间:2018-08-30 19:14:33

标签: python pandas dataframe nan

我有一个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。是否有可能这样,所以我不需要使用我所说的部分解决方案?

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