На самом деле вам не нужен al oop в вашем скрипте для достижения этой цели. Давайте создадим пример DataFrame
. Замените любую строку 'NULL' в столбцах даты на NaN
.
import numpy as np
import pandas as pd
df = pd.DataFrame({'Start_Date': ['2020-01-02', '2020-01-09', '2020-01-20'],
'End_Date': ['2020-01-06', 'NULL', '2020-01-25']}).replace('NULL', np.nan)
# df
# Start_Date End_Date
# 0 2020-01-02 2020-01-06
# 1 2020-01-09 NaN
# 2 2020-01-20 2020-01-25
Теперь проанализируйте все строки даты на datetime
объектах, затем вычислите столбец 'Mid_Date', используя дату начала плюс половину дельта в днях. Обратите внимание, что теперь у вас есть 'Mid_Date' в качестве столбца DateTime, а не только Date. Кроме того, неравномерное деление на 2 добавляет несколько часов к результату:
df[['Start_Date', 'End_Date']] = df[['Start_Date', 'End_Date']].apply(pd.to_datetime)
df['Mid_Date'] = (df.Start_Date + (df.End_Date - df.Start_Date) / 2)
# df
# Start_Date End_Date Mid_Date
# 0 2020-01-02 2020-01-06 2020-01-04 00:00:00
# 1 2020-01-09 NaT NaT
# 2 2020-01-20 2020-01-25 2020-01-22 12:00:00
Теперь вы можете заменить любое «NaN» в столбце «Mid_Date» значением из столбца «Start_Date» и, если хотите, 'Mid_Date' - столбец с чистой датой (лишите H: M: S), вы также можете сделать это, добавив .dt.date
:
df['Mid_Date'] = df.Mid_Date.fillna(df.Start_Date).dt.date
# df
# Start_Date End_Date Mid_Date
# 0 2020-01-02 2020-01-06 2020-01-04
# 1 2020-01-09 NaT 2020-01-09
# 2 2020-01-20 2020-01-25 2020-01-22