我正在阅读p, day, month
的csv文件,并将其放在df
中。目标是从日、月、年创建一个日期,我在2月29日遇到了这个错误:
ValueError: cannot assemble the datetimes: day is out of range for month
我想当这个错误发生时,用前一天替换前一天。我们怎么能做到呢?下面是我的pd和datex
的几行,最后是我想得到的
p day month year datex
0 p1 29 02 2021 28Feb-2021
1 p2 18 07 2021 18Jul-2021
2 p3 12 09 2021 12Sep-2021
现在,我的日期代码仅如下所示,所以我有nan,其中日期不存在。
df['datex'] = pd.to_datetime(df[['year', 'month', 'day']], errors='coerce')
你可以尝试这样做:
df['datex'] = pd.to_datetime(df[['year', 'month', 'day']], errors='coerce')
确实,你得到NA:
p day year month datex
0 p1 29 2021 2 NaT
1 p2 18 2021 7 2021-07-18
2 p3 12 2021 9 2021-09-12
你可以为这些NA做一个特殊的例子:
df.loc[df.datex.isnull(), 'previous_day'] = df.day -1
p day year month datex previous_day
0 p1 29 2021 2 NaT 28.0
1 p2 18 2021 7 2021-07-18 NaN
2 p3 12 2021 9 2021-09-12 NaN
df.loc[df.datex.isnull(), 'datex'] = pd.to_datetime(df[['previous_day', 'year', 'month']].rename(columns={'previous_day': 'day'}))
p day year month datex previous_day
0 p1 29 2021 2 2021-02-28 28.0
1 p2 18 2021 7 2021-07-18 NaN
2 p3 12 2021 9 2021-09-12 NaN
如果您想在day列中保留day = 29,则必须创建一个新的day列。