создание сдвинутой во времени копии кадра данных Pandas с указателем даты и времени - PullRequest
0 голосов
/ 16 апреля 2020

Я хотел сделать корреляцию временных рядов двух кадров данных; сырой и старый. Я создал сдвинутую во времени копию моего первого информационного кадра, названного shiftted_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

Обратите внимание, как время в одном сдвигается на 10se c. Таким образом, сдвиг сработал, и оба индекса являются объектами даты и времени:

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]. Если вы хотите sh, чтобы продолжить, вы должны использовать pd.concat

Индексы соответствуют типу, а столбцы соответствуют типу.

Итак, вот мой вопрос нуба: что во имя Майка? я делаю не так?

1 Ответ

0 голосов
/ 16 апреля 2020

Вы указали left_on, left_index, right_on и right_index. Pandas по умолчанию сравнивает сначала 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'
)
...