首页 > 解决方案 > 在 python pandas 中创建新的日期列

问题描述

我正在尝试根据数据框中的现有日期列创建一个新的日期列。我想获取第一列中的所有日期,并将它们设为第二列中的每月第一天,因此:

2019 年 3 月 15 日 = 2019 年 3 月 1 日

我知道我可以这样做:

df['newcolumn'] = pd.to_datetime(df['oldcolumn'], format='%Y-%m-%d').apply(lambda dt: dt.replace(day=1)).dt.date

我的问题是旧列中的某些数据不是有效日期。某些行中有一些文本数据。所以,我试图弄清楚如何在我这样做之前清理数据:

如果 oldcolumn 不是日期,则将其设为 01/01/1990 否则 oldcolumn

或者,有没有办法用 try/except 做到这一点?

任何援助将不胜感激。

标签: pythonpandasdate

解决方案


首先我们生成一些样本数据:

df = pd.DataFrame([['2019-01-03'], ['asdf'], ['2019-11-10']], columns=['Date'])

这可以安全地转换为datetime

df['Date'] = pd.to_datetime(df['Date'], errors='coerce')
mask = df['Date'].isnull()
df.loc[mask, 'Date'] = dt.datetime(1990, 1, 1)

现在你不需要慢apply

df['New'] = df['Date'] + pd.offsets.MonthBegin(-1)

推荐阅读