我有一个pandas DataFrame,其中我有包含日期的列。
我需要确保这些列中只包含日期。有没有人对如何做到这一点有任何建议? 我想过只是简单地找到哪些行包含除日期之外的类型的数据 - 尽管我不知道如何对此进行编码。
任何帮助将不胜感激!
答案 0 :(得分:0)
如果数据不包含NaN
或None
s值,则需要检查所有字符串值是否可以转换为datetime
使用apply
和to_datetime
并且参数errors='coerce'
如果无法解析某个值,则返回NaT
。然后添加notnull
all
作为掩码,并选择loc
:
df = pd.DataFrame({'a':['2015-02-04','2015-02-05','2015-02-06'],
'b':['2015-02-06','2015-02-06', 'u'],
'c':['2015-01-01','d','2015-02-06']})
print (df)
a b c
0 2015-02-04 2015-02-06 2015-01-01
1 2015-02-05 2015-02-06 d
2 2015-02-06 u 2015-02-06
cols = ['a','b','c']
mask = df[cols].apply(pd.to_datetime, errors='coerce').notnull().all()
print (mask)
a True
b False
c False
dtype: bool
print (df.loc[:, mask])
a
0 2015-02-04
1 2015-02-05
2 2015-02-06
或者,如果需要检查某些列是否已dtype
datetime
使用DataFrame.select_dtypes
:
df['a'] = pd.to_datetime(df['a'])
print (df)
a b c
0 2015-02-04 2015-02-06 2015-01-01
1 2015-02-05 2015-02-06 d
2 2015-02-06 u 2015-02-06
print (df.dtypes)
a datetime64[ns]
b object
c object
dtype: object
print (df.select_dtypes(include=['datetime']))
a
0 2015-02-04
1 2015-02-05
2 2015-02-06