实际上,您不需要在脚本中使用循环来实现此目的。让我们创建一个示例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
您现在可以将“Mid_Date”列中的任何“NaN”替换为“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