在pd中创建日期时处理ValueError



我正在阅读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列。

最新更新