我正在通过 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 追加之前。
