pandas DataFrame combine_first方法在浮点数中转换boolean

时间:2016-08-23 13:52:44

标签: python pandas dataframe

我遇到了一个奇怪的问题,其中combine_first方法导致存储为bool的值被上传到float64s。 例如:

In [1]: import pandas as pd

In [2]: df1 = pd.DataFrame({"a": [True]})

In [3]: df2 = pd.DataFrame({"b": ['test']})

In [4]: df2.combine_first(df1)
Out[4]:
     a     b
0  1.0  test

3年前的一篇文章中已经报道了这个问题:pandas DataFrame combine_first and update methods have strange behavior。这个问题被告知要解决,但我仍然在pandas 0.18.1

下有这种行为

谢谢你的帮助

2 个答案:

答案 0 :(得分:4)

在事件链的某个地方,为了获得合并的数据帧,必须解决潜在的缺失值。我知道你的例子中没有遗漏任何东西。 Nonenp.nan不是intbool。因此,为了使包含dtypeboolNone的公共np.nan,必须将列强制转换为object或{{ 1}}。作为'浮动',大量的操作变得更有效率,是一个不错的选择。它显然不是所有时间的最佳选择,但必须做出选择,大熊猫试图推断出最佳选择。

解决方法:

<强> 设置

float

enter image description here

<强> 解决方案

df1 = pd.DataFrame({"a": [True]})
df2 = pd.DataFrame({"b": ['test']})

df3 = df2.combine_first(df1)
df3

enter image description here

答案 1 :(得分:0)

我遇到了同样的问题。这个具体案例似乎尚未在熊猫中得到修复。我已经提交了一份错误报告:

https://github.com/pandas-dev/pandas/issues/20699