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

2022-12-08 13:24:39 发布


我有一个pandasDataFrame,需要根据过滤器将某些值替换为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之间也会发生同样的情况。但是,我希望在将任何值转换为NaN时避免将值TrueFalse分别更改为0和1。这有可能让我´你不需要用我说的部分解吗


Tags: 数据importfalsetrue过滤器dfasnpnanfilterseriespd数据类型dtypepandasdataframe
1条回答
网友
1楼 · 发布于 2022-12-08 13:24:39

更改为过滤器前的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

相关问题 更多 >