首页 > 解决方案 > 数据框不合并,但使用 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)

结果没有改变。如果我将这些 df1 和 df2 导出到 csv 使用,df.to_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

标签: pythonpandasdataframedata-sciencedata-processing

解决方案


我发现了这个问题,虽然改变了格式和风格,但它没有用。所以我确实尝试将日期字段转换为字符串,问题得到了解决。非常感谢你花时间陪我!


推荐阅读