删除不符合要求的列值

时间:2016-07-11 15:48:38

标签: python pandas

我有一个带有'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?如果没有,我怎么能在正则表达式中写这个?

1 个答案:

答案 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