优化pandas数据帧的字符串检查功能?

时间:2016-03-31 17:58:53

标签: python pandas dataframe

我有一个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)]

1 个答案:

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