首页 > 解决方案 > 合并缺少行的数据帧

问题描述

我想合并两个 DataFrame:

df1:

               dt_object      Lng
1    2020-01-01 00:00:00  1.57423
2    2020-01-01 01:00:00  1.57444
3    2020-01-01 02:00:00  1.57465
4    2020-01-01 03:00:00  1.57486

df2:

               dt_object       Price
0    2020-01-03 10:00:00  256.086667
1    2020-01-03 11:00:00  256.526667
2    2020-01-03 12:00:00  257.386667
3    2020-01-03 13:00:00  256.703333
4    2020-01-03 14:00:00  255.320000

dt_object 在这两种情况下都具有datetime64类型

df1 永远不会丢失行。所以它每天有24小时。

但是 df2 缺少行。

当我将它们结合起来时,就会出现不匹配。

df = pd.merge(df1, df2, on = 'dt_object')

合并的df:

               dt_object      Lng       Price
0    2020-04-01 10:00:00  1.59270  183.996667
1    2020-04-01 11:00:00  1.59294  184.466667
2    2020-04-01 12:00:00  1.59319  184.810000
3    2020-04-01 13:00:00  1.59343  184.386667
4    2020-04-01 14:00:00  1.59367  184.533333

问题:

  1. Lng 1.59270 放错地方了。它从04.01.2020 10:00:00于2020-04-01 10:00:00起飞(月份和日期搞砸了)。但是价格 183.996667 是正确的。所以所有的 Lng 都是从错误的日期起飞的,日期/月份搞砸了。
  2. df2 中的价格从 2020-01-03 10:00:00 开始,但合并的数据框从 2020-04-01 开始

当我看到这个问题时,我为两个数据框添加了:

df1['dt_object'] = pd.to_datetime(df1['dt_object'], format='%Y-%m-%d %H:%M:%S')
df2['dt_object'] = pd.to_datetime(df2['dt_object'], format='%Y-%m-%d %H:%M:%S')

,但没有帮助。没有改变。dt_object 内部是一个奇怪的月份/日期错误,但我无法检测到它。请帮我修一下!

标签: pythonpandasdataframe

解决方案


您必须指定要执行左连接。Pandas 文档解释了参数的不同选项how

>>> df1 = pd.DataFrame({'dt_object': pd.date_range('2020-01-01', '2020-01-04'), 'Lng': [0, 1, 2, 3]})
>>> df1
   dt_object  Lng
0 2020-01-01    0
1 2020-01-02    1
2 2020-01-03    2
3 2020-01-04    3

>>> df2 = pd.DataFrame({'dt_object': [pd.Timestamp('2020-01-01'), pd.Timestamp('2020-01-02'), pd.Timestamp('2020-01-04')], 'Price': [1000, 2000, 3000]})
>>> df2
   dt_object  Price
0 2020-01-01   1000
1 2020-01-02   2000
2 2020-01-04   3000

>>> df1.merge(df2, how='left')
   dt_object  Lng   Price
0 2020-01-01    0  1000.0
1 2020-01-02    1  2000.0
2 2020-01-03    2     NaN
3 2020-01-04    3  3000.0

推荐阅读