数据帧不会合并,而是使用 Pandas Python 进行连接



问题是当从查询中获取数据并像一样使用时

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(' ','').split(','))

理论上,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()将它们读回,那么现在合并是完美的,但问题是我不应该这样做。这是作弊,如果影响其他气流任务,可能会导致一些失败。

我想使用merge的目的是通过使用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

我发现了这个问题,尽管更改了格式和样式,但它没有起作用。所以我试着把日期字段转换成字符串,问题解决了。非常感谢你为我抽出时间!

最新更新