Python: Предупреждение о производительности: Добавление/вычитание массива object-dtype в массив TimedeltaArray, не векторизованный

#python #pandas

Вопрос:

У меня есть фрейм данных DF с 2 столбцами дат (тип данных объекта) в приведенном ниже формате:

 date_column1 date_column2 2021-08-14 2021-09-19 2021-10-11 2021-11-02 2019-09-15 2021-10-25 ... ...  

и я хочу вставить новую колонку, основанную на приведенном ниже:

 DF['date_new'] = DF['date_column2']   (DF['date_column2']-DF['date_column1'])  

Код работает, но я получаю следующее предупреждение

 C:ProgramDataAnaconda3libsite-packagespandascorearraysdatetimelike.py:1190:  PerformanceWarning: Adding/subtracting object-dtype array to TimedeltaArray not vectorized  

Как я должен адаптировать свой код, чтобы исправить это предупреждение?

Ответ №1:

Смоделированная с помощью ваших выборочных данных ситуация возникает, когда вы date_column1 используете строковый тип, а date_column2 тип даты-времени. Другие комбинации дают ошибки другого рода. Когда оба они относятся к типу datetime, ошибки нет.

Вы пройдете через предупреждение date_column1 , также преобразовав его в тип даты и времени следующим образом:

 DF['date_column1'] = pd.to_datetime(DF['date_column1'])  # or to play safe, also convert `date_column2` DF['date_column2'] = pd.to_datetime(DF['date_column2'])  

После этого вы получите успешный результат следующим образом без предупреждения:

 0 2021-10-25 1 2021-11-24 2 2023-12-05 dtype: datetime64[ns]