В Python я пытаюсь удалить строки фрейма данных, если даты ниже дат другого фрейма данных. Но сравнение не работает.

Вот два моих фрейма данных и результаты, которые я пытаюсь сравнить. print(MeteoCH.head()) приведет к:

                       TempAvg  TempMin  TempMax
Date                                                                      
2021-11-15 00:00:00      4.4      4.3      4.5     
2021-11-15 01:00:00      4.3      4.3      4.3     
2021-11-15 02:00:00      4.1      4.1      4.2     
2021-11-15 03:00:00      4.0      3.8      4.1    
2021-11-15 04:00:00      3.6      3.4      3.8    

И print(PicoLog.head()) приведет к:

                           Temp1   Temp2   Temp3   
Date                                                                        
2021-11-15 18:34:18+01:00  21.268  21.671  21.190     
2021-11-15 18:34:20+01:00  21.266  21.673  21.194     
2021-11-15 18:34:22+01:00  21.270  21.680  21.194     
2021-11-15 18:34:24+01:00  21.263  21.673  21.180    
2021-11-15 18:34:26+01:00  21.262  21.672  21.185

Если я попытаюсь выполнить следующую команду:

MeteoCH.drop(MeteoCH[MeteoCH.index < PicoLog.index.min()], inplace=True)

Это приводит к следующей ошибке:

TypeError: недопустимое сравнение между dtype = datetime64 [ns] и отметкой времени.

Почему? Как это решить?

Пытался как-то "конвертировать", но не получается.

Может кто-то помочь мне, пожалуйста ?

1
Elfo2285 24 Ноя 2021 в 12:01

1 ответ

Лучший ответ

Упрощение фильтруется по большему или равному, инвертированному <, например:

MeteoCH[MeteoCH.index >= PicoLog.index.min()]

MeteoCH[~(MeteoCH.index < PicoLog.index.min())]

Ваше решение - возможно изменение фильтрации MeteoCH.index, но на мой взгляд излишне сложное:

MeteoCH.drop(MeteoCH.index[MeteoCH.index < PicoLog.index.min()], inplace=True)

РЕДАКТИРОВАТЬ:

Исходной проблемой было смещение часового пояса, решение - DatetimeIndex.tz_localize:

PicoLog.index = PicoLog.index.tz_localize(None)
1
jezrael 24 Ноя 2021 в 12:26
Привет, спасибо за ответ, но это не работает. Если я наберу MeteoCH[MeteoCH.index >= PicoLog.index.min()], у меня останется TypeError: Invalid comparison between dtype=datetime64[ns] and Timestamp
 – 
Elfo2285
24 Ноя 2021 в 12:10
- Какая у вас версия панд?
 – 
jezrael
24 Ноя 2021 в 12:11
$ pip show pandas Name: pandas Version: 1.3.3
 – 
Elfo2285
24 Ноя 2021 в 12:13
1
Кстати, я должен убрать это фиксированное смещение. Я не знаю, почему он появляется, когда я читаю свой файл Excel ...
 – 
Elfo2285
24 Ноя 2021 в 12:19
1
- это должно помочь. Попробуйте PicoLog.index = PicoLog.index.tz_localize(None) (как упомянуто здесь)
 – 
jezrael
24 Ноя 2021 в 12:21