熊猫验证日期格式

时间:2018-03-22 17:56:37

标签: python pandas datetime

有没有很好的方法可以验证数据框列中的所有项目都有有效的日期格式?

我的日期格式为11-Aug-2010

我看到了这个通用答案,其中:

try:
    datetime.datetime.strptime(date_text, '%Y-%m-%d')
except ValueError:
    raise ValueError("Incorrect data format, should be YYYY-MM-DD")

来源:https://stackoverflow.com/a/16870699/1374488

但我认为在我的情况下这不好(有效)。

我假设我必须首先将字符串修改为pandas日期,如下所述: Convert string date time to pandas datetime

我是Python世界的新手,任何想法都很受欢迎。

2 个答案:

答案 0 :(得分:7)

(从piRSquared的答案借来的格式)

if pd.to_datetime(df['date'], format='%d-%b-%Y', errors='coerce').notnull().all():
    # do something 

这是LYBL-“在你跳跃之前看”的方法。这将返回True,假设所有日期字符串都有效 - 这意味着它们都被转换为实际的pd.Timestamp个对象。无效的日期字符串被强制转换为NaT,这是相当于NaN的日期时间。

可替换地,

try:
    pd.to_datetime(df['date'], format='%d-%b-%Y', errors='raise')
    # do something
except ValueError:
    pass

这是EAFP-“更容易请求宽恕而不是权限”方法,遇到无效日期字符串时会引发ValueError

答案 1 :(得分:4)

如果您知道自己的格式,可以使用布尔切片

mask = pd.to_datetime(df.columns, format='%d-%b-%Y', errors='coerce').notna()
df.loc[:, mask]

考虑数据框df

df = pd.DataFrame(1, range(1), ['11-Aug-2010', 'August2010, I think', 1])
df

   11-Aug-2010  August2010, I think  1
0            1                    1  1

我可以用

过滤
mask = pd.to_datetime(df.columns, format='%d-%b-%Y', errors='coerce').notna()
df.loc[:, mask]

   11-Aug-2010
0            1