问题描述
df1 = pd.DataFrame(test_data)
df2 = pd.DataFrame(original_data)
df = df1.merge(df2,how = 'outer',indicator=False,left_on = query_uniq_col.replace(' ','').split(','),right_on = query_uniq_col.replace(' ','))
理论上,df应该是df1和df2的合并,但原来df是df1和df2串联的结果。我已经尝试使用
来匹配 df1 和 df2 之间的类型for x in df2.columns:
df1[x]=df1[x].astype(df2[x].dtypes.name)
print(df1[x].dtypes)
if str(df1[x].dtypes) == 'float64':
print('yes')
df1[x].round(decimals=8)
df2[x].round(decimals=8)
结果不会改变。如果我使用 df.to_csv()
将这些 df1 和 df2 导出到 csv 然后用 df.read_csv()
读回它们,现在合并是完美的,但问题是我不应该这样做。这是作弊,如果影响其他气流任务可能会导致一些失败。
我想使用合并的目的是通过使用找到两个数据帧之间的差异
df["difference"]= df["gtv_x"] - df["gtv_y"]
然后我会将唯一的差异写回数据库。
请帮忙
当前:
df1:
date city vehicle_type gtv number_of_bookings
2021-11-07 HCM Car 1000 200
2021-11-06 HN Truck 2000 300
2021-11-05 LA 6w_truck 3000 400
2021-11-04 CM mini_van 4000 500
df2:
date city vehicle_type gtv number_of_bookings
2021-11-07 HCM Car 1000 200
2021-11-06 HN Truck 2000 300
2021-11-05 LA 6w_truck 3000 400
2021-11-04 CM mini_van 9000 500
df:
date city vehicle_type gtv_x number_of_bookings_x gtv_y number_of_bookings_y
2021-11-07 HCM Car 1000 200
2021-11-06 HN Truck 2000 300
2021-11-05 LA 6w_truck 3000 400
2021-11-04 CM mini_van 4000 500
2021-11-07 HCM Car 1000 200
2021-11-06 HN Truck 2000 300
2021-11-05 LA 6w_truck 3000 400
2021-11-04 CM mini_van 9000 500
期待:
date city vehicle_type gtv_x number_of_bookings_x gtv_y number_of_bookings_y
2021-11-07 HCM Car 1000 200 1000 200
2021-11-06 HN Truck 2000 300 2000 300
2021-11-05 LA 6w_truck 3000 400 3000 400
2021-11-04 CM mini_van 4000 500 9000 500
解决方法
我发现了这个问题,虽然改变了格式和样式,但没有用。所以我确实尝试将日期字段转换为字符串,问题解决了。非常感谢您为我抽出时间!