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