删除pandas列中包含无效日期的行

时间:2018-01-09 09:38:33

标签: python regex python-3.x pandas

我的数据框如下:

df:
date       value
20171231   500
20161231   321.25
20111512   234
20151215   900.7
19900101   6252.1
19791131   123
...

其中date列是一个整数,格式为YYYYMMDD。在转换为 pd.to_datetime 之前,我想过滤此列,其中有效日期介于1980年至今。

执行此操作的有效方法是什么?使用regexp或任何其他可用的pandas方法?

1 个答案:

答案 0 :(得分:1)

您可以使用to_datetime转换为参数errors='coerce'的日期时间,然后使用boolean indexing或双重条件按between进行过滤:

today = pd.datetime.today()
print (today)
2018-01-09 10:51:42.701585

df['date'] = pd.to_datetime(df['date'], format='%Y%m%d', errors='coerce')

df = df[df['date'].between('1980-01-01', today)]
df = df[(df['date'] > '1980-01-01') & (df['date'] < today)]
df = df.query("'1980-01-01' < date < @today")
print (df)
        date    value
0 2017-12-31   500.00
1 2016-12-31   321.25
3 2015-12-15   900.70
4 1990-01-01  6252.10