将NaN添加到熊猫系列中时,保留bool和浮子之间的区别?

时间:2013-08-20 23:42:20

标签: python numpy pandas

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

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

1 个答案:

答案 0 :(得分:1)

正如@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,然后再追加。