【问题标题】:dataframes don't merge but concat using pandas python数据框不合并,但使用 pandas python 连接
【发布时间】:2021-07-10 17:31:47
【问题描述】:

问题是从查询中获取数据并使用like

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

我想使用合并的目的是通过使用找到 2 个数据帧之间的差异 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

【问题讨论】:

  • provide minimal-reproducible-example...给出 2 个示例数据框,以便任何人都知道您的数据是什么样子并对其进行一些测试
  • @AnuragDabas 是的,我只是将其附加到问题中,谢谢提醒
  • 什么是query_uniq_col?因为df = df1.merge(df2, how='outer', on=['date', 'city', 'vehicle_type']) 有效
  • @HenryEcker 它是关于拆分文本以获取唯一列的名称,即使我像 on=['date', 'city', 'vehicle_type'] 那样使用,它仍然没有达到预期

标签: python pandas dataframe data-science data-processing


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2015-11-25
    • 1970-01-01
    • 1970-01-01
    • 2020-05-24
    • 2018-09-27
    • 2018-05-23
    • 2021-06-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多