使用日期时间索引创建熊猫数据框的时移副本

时间:2020-04-16 16:18:59

标签: python pandas datetime merge

我想对两个数据帧进行时间序列相关;生与旧。我已经创建了我的第一个数据帧的时移副本,称为shifted_raw以与旧版本进行比较。

我用过

shifted_index=vraw_os_flight_data_df.index+timedelta(seconds=timeshift)
shifted_vraw_os_flight_data_df=vraw_os_flight_data_df.copy()
shifted_vraw_os_flight_data_df.index=shifted_index
shifted_vraw_os_flight_data_df.columns=['shifted_raw_altitude','shifted_raw_lat','shifted_raw_lon']

创建具有偏移时间索引的原始数据帧的副本

这是两个数据帧的输出

2018-04-05 18:45:00    368.71
2018-04-05 18:45:01    368.76

2018-04-05 21:13:59    371.35
2018-04-05 21:14:00    371.40
Freq: S, Name: old_altitude, Length: 8941, dtype: float64

2018-04-05 18:44:50    368.71
2018-04-05 18:44:51    368.76

2018-04-05 21:13:49    371.35
2018-04-05 21:13:50    371.40
Freq: S, Name: shifted_raw_altitude, Length: 8941, dtype: float64

请注意一秒中的时间如何偏移10秒。因此,轮班成功了,并且两个索引都是日期时间对象:

DatetimeIndex(['2018-04-05 18:45:00', '2018-04-05 18:45:01',
               '2018-04-05 18:45:02', '2018-04-05 18:45:03',
               ...
               '2018-04-05 21:13:57', '2018-04-05 21:13:58',
               '2018-04-05 21:13:59', '2018-04-05 21:14:00'],
              dtype='datetime64[ns]', name=0, length=8941, freq='S')
DatetimeIndex(['2018-04-05 18:44:50', '2018-04-05 18:44:51',
               '2018-04-05 18:44:52', '2018-04-05 18:44:53',
               ...
               '2018-04-05 21:13:47', '2018-04-05 21:13:48',
               '2018-04-05 21:13:49', '2018-04-05 21:13:50'],
              dtype='datetime64[ns]', name=0, length=8941, freq='S')

但是当我尝试通过合并两个数据框时:

merged_dataframe=shifted_vraw_os_flight_data_df.merge(vold_os_flight_data_df, left_on=['shifted_raw_altitude'], right_on=['old_altitude'],how='outer',left_index=True,right_index=True)

我收到此错误:

ValueError:您正在尝试合并float64和datetime64 [ns]列。如果要继续,则应使用pd.concat

索引匹配类型,列匹配类型。

所以这是我的菜鸟问题:我以迈克的名义做错了什么?

1 个答案:

答案 0 :(得分:0)

您指定了left_onleft_indexright_onright_index。熊猫默认情况下,将第一个left_onright_index比较,将shifted_raw_altitudefloat64)与right_index(datetime64[ns]

如果您需要合并多个列,包括索引:

merged_dataframe = shifted_vraw_os_flight_data_df.reset_index().merge(
        vold_os_flight_data_df.reset_index(),
        left_on=['index', 'shifted_raw_altitude'],
        right_on=['index', 'old_altitude'],how='outer'
)