Skip to main content
 首页 » 编程设计

python之将 NaN 添加到 pandas 系列时,保留 bool 和 float 之间的区别

2025年05月04日10shanyou

我正在通过 Series#append 方法向 pandas Series 添加数据。不幸的是,当 nan 添加到 bool 系列时,它会自动转换为 float 系列。有什么方法可以避免这种转换,或者至少将其强制转换为 object dtype,以便保留 bool 和 float 之间的区别是吗?

>>> Series([True])                             
0    True 
dtype: bool 
>>> Series([True]).append(Series([np.nan])) 
0     1 
0   NaN 
dtype: float64 

请您参考如下方法:

正如@Jeff 所说,最好的方法是将 Series 附加到 object dtype

这是一个使用 Series

的例子
s = Series([True]) 
s.append(Series([nan], index=[1], dtype=object)) 

屈服

0    True 
1     NaN 
dtype: object 

还有一个带有 DataFrame 的:

df = DataFrame({'a': rand(10) > 0.5, 'b': randn(10)}, columns=list('ab')) 
df2 = DataFrame({'a': Series([nan], dtype=object), 'b': [1.0]}, columns=df.columns, index=[len(df)]) 
df3 = df.append(df2) 
print df3 
print 
print df3.dtypes 

给出

        a      b 
0   False -0.865 
1    True -0.186 
2    True  0.078 
3    True  0.995 
4   False -1.420 
5    True -0.340 
6    True  0.042 
7    True -0.627 
8    True -0.217 
9    True  1.226 
10    NaN  1.000 
 
a     object 
b    float64 
dtype: object 

它看起来有点笨拙,但如果你已经有了 Series 那么你可以执行 s.astype(object) 将它们转换为 object dtype 追加之前。