我有一个带有'date_of_birth'列的pandas数据框。例如,值采用1977-10-24T00:00:00.000Z
形式。
我想抓住这一年,所以我尝试了以下内容:
X['date_of_birth'] = X['date_of_birth'].apply(lambda x: int(str(x)[4:]))
如果我保证前4个字母总是整数,但是它在我的数据集上失败,因为某些日期搞砸了或垃圾,这是有效的。有没有办法在不使用正则表达式的情况下调整我的lambda?如果没有,我怎么能在正则表达式中写这个?
答案 0 :(得分:2)
我认为最好只使用to_datetime
转换为datetime
dtype,您可以使用dropna
删除无效行,也可以使用{{3访问年份属性}}:
In [58]:
df = pd.DataFrame({'date':['1977-10-24T00:00:00.000Z', 'duff', '200', '2016-01-01']})
df['mod_dates'] = pd.to_datetime(df['date'], errors='coerce')
df
Out[58]:
date mod_dates
0 1977-10-24T00:00:00.000Z 1977-10-24
1 duff NaT
2 200 NaT
3 2016-01-01 2016-01-01
In [59]:
df.dropna()
Out[59]:
date mod_dates
0 1977-10-24T00:00:00.000Z 1977-10-24
3 2016-01-01 2016-01-01
In [60]:
df['mod_dates'].dt.year
Out[60]:
0 1977.0
1 NaN
2 NaN
3 2016.0
Name: mod_dates, dtype: float64