在 pd 中创建日期时处理 ValueError

Handle ValueError while creating date in pd

我正在使用 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 = 29,则必须创建一个新的日列。