现象:
两个df对象:A和B(A对象无id列,B对象有,int64类型);
通过merge得到df对象C(其中on为['type']),发现C的id列数据精度丢失了(数据不准确了)
原因:
当merge时,部分行的id为nan,此时pandas会将id列的类型转成float;
当id的数值太大是(超过12位),此时转换成float后得到的id将不准确。
ps:
如果merge时,不存在行的id为nan,则pandas不会进行转换,此时id列的数据函数准确的(还是int64)。
测试示例:
test_list_1 = [
{
's_id': '11',
'm_id': '11',
},
{
's_id': '22',
'm_id': '22',
},
{
's_id': '33',
'm_id': '33',
},
]
test_list_2 = [
{
'id': 5764607523070845638,
's_id': '11',
'm_id': '11',
},
{
'id': 5764607523070845639,
's_id': '11',
'm_id': '11',
},
]
df = pd.DataFrame(test_list_1)
exist_df = pd.DataFrame(test_list_2)
merge_df = df.merge(
exist_df,
how="left",
on=['s_id', 'm_id'],
suffixes=("", '_exist'),
)
print(merge_df)