我遇到了一个奇怪的问题,其中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
下有这种行为谢谢你的帮助
答案 0 :(得分:4)
在事件链的某个地方,为了获得合并的数据帧,必须解决潜在的缺失值。我知道你的例子中没有遗漏任何东西。 None
和np.nan
不是int
或bool
。因此,为了使包含dtype
和bool
或None
的公共np.nan
,必须将列强制转换为object
或{{ 1}}。作为'浮动',大量的操作变得更有效率,是一个不错的选择。它显然不是所有时间的最佳选择,但必须做出选择,大熊猫试图推断出最佳选择。
解决方法:
<强> 设置 强>
float
<强> 解决方案 强>
df1 = pd.DataFrame({"a": [True]})
df2 = pd.DataFrame({"b": ['test']})
df3 = df2.combine_first(df1)
df3
答案 1 :(得分:0)
我遇到了同样的问题。这个具体案例似乎尚未在熊猫中得到修复。我已经提交了一份错误报告: