【发布时间】:2016-11-21 12:27:36
【问题描述】:
这是我的代码:
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')
当我打印我的结果数据帧时,整数值现在是浮点数:
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
如何防止这种情况发生?
【问题讨论】:
-
显然这是一个错误,将在 0.18.2 中修复 github.com/pydata/pandas/issues/8596
-
我可以重现此问题并已投票重新打开。重现所需的代码略有不同
-
left = pd.DataFrame({'AID': [1, 2, 3, 4], 'D': [2011, 2011,0, 2011], 'R1': [0, 1, 0, 0], }) 右 = pd.DataFrame({'AID': [1, 2, 3, 4], 'D': [2012, 0,0, 2012], 'R2': [1 , 0, 0, 0] }) 结果 = left.merge(right, how = 'outer', on=['AID', 'D']) 结果
-
请注意,如果由于两个数据帧的索引或列之间的不匹配而产生 NaN 值,则浮点数可能会出现在人们只期望整数的地方。请注意如何指定合并类型,即如何在
.merge()中设置howkwarg。这是我问题的根源。最后,我尝试了 Rakesh 的代码,但无法重现他/她的错误。