有没有很好的方法可以验证数据框列中的所有项目都有有效的日期格式?
我的日期格式为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世界的新手,任何想法都很受欢迎。
答案 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