我有一个pandas数据框,其日期列的格式应为' 2016-01-17'。
有时日期是垃圾,可能看起来像' 0-1274753-3',我想删除这些行。
我的尝试基本上是定义一个函数来检查一个字符串是否是一个日期,然后在列中的每个条目中应用它,抛出失败的行。这是一个跨大型数据帧的缓慢过程,我希望找到更好的解决方案。
目前的尝试看起来像:
from dateutil.parser import parse
def is_date (string):
try:
parse (string)
return True
except ValueError:
return False
df = df [df.datecol.apply(is_date)]
答案 0 :(得分:1)
使用errors='coerce'
将无效日期字符串转换为NaN。然后使用dropna()
删除NaN
个值的行:
import pandas as pd
df = pd.DataFrame({'datecol':['2016-01-17', '0-1274753-3']})
df['datecol'] = pd.to_datetime(df['datecol'], errors='coerce')
# this drops all rows which contain NaN
df = df.dropna(axis=0, how='any')
# alternatively, use this to drop all rows which contain NaN in the datecol column
# df = df.loc[pd.notnull(df['datecol'])]
print(df)
产量
datecol
0 2016-01-17