我想对两个数据帧进行时间序列相关;生与旧。我已经创建了我的第一个数据帧的时移副本,称为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
索引匹配类型,列匹配类型。
所以这是我的菜鸟问题:我以迈克的名义做错了什么?
答案 0 :(得分:0)
您指定了left_on
,left_index
,right_on
和right_index
。熊猫默认情况下,将第一个left_on
与right_index
比较,将shifted_raw_altitude
(float64
)与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'
)