下面是我的代码:
import pandas as pd
left = pd.DataFrame({'AID': [1, 2, 3, 4],
'D': [2011, 2011,0, 2011],
'R1': [0, 1, 0, 0],
'R2': [1, 0, 0, 0] })
right = pd.DataFrame({'AID': [1, 2, 3, 4],
'D': [2012, 0,0, 2012],
'R1': [0, 1, 0, 0],
'R2': [1, 0, 0, 0] })
result = left.merge(right, how = 'outer')
当我打印结果dataFrame时,整数值现在是浮点数:
AID D R1 R2
0 1.0 2011.0 0.0 1.0
1 2.0 2011.0 1.0 0.0
2 3.0 0.0 0.0 0.0
3 4.0 2011.0 0.0 0.0
4 1.0 2012.0 0.0 1.0
5 2.0 0.0 1.0 0.0
6 4.0 2012.0 0.0 0.0
我该如何预防这种情况?
4条答案
按热度按时间pu82cl6c1#
此错误已在pandas v0.19.0中修复。:
合并现在将保留联接键的dtype
但请注意,您可以使用以下命令将dataframe中的所有列转换为
int
dtype:如果join中有不匹配的记录,那么这种行为 * 确实 * 仍然会发生,因此结果中有
NaN
s。在这种情况下,您需要将dtype更改为扩展类型'Int64'
以处理NaN
s:6qfn3psc2#
你可以将浮点数强制转换回使用
如果数据为空或缺少数据
输出
然后,您可以将nan值替换为:平均值、0或插值
固定色谱柱D
输出
ltskdhd13#
我也遇到了同样的问题,这是因为在合并后,我在重新铸造的列中得到了一些NaN的值。
所以,我的“before”列是int32,我的“now”表是float64。
当我想把它转换成int32时,我遇到了这个问题:
“值错误:无法将非有限值(NA或inf)转换为整数”
所以我把它放在float64:D上
odopli944#
不幸的是,按照iacob的建议使用
int64
对我没有帮助。我使用了type=object
,它工作得很好。使用这种类型时,数学运算也是可能的。