所以我有这个数据集:
1.0 20/20/1999
2.0 31/2014
3.0 2015
4.0 2008-01-01 00:00:00
5.0 1903-10-31 00:00:00
6.0 1900-01-20 00:00:00
7.0 2011-02-21 00:00:00
8.0 1999-10-11 00:00:00
从excel导入的那些日期但是由于数据集很大且来自多个来源,我可以使用 - 或/或没有任何数量的yyyy-mm-dd排列作为分隔符并且缺少月份或日期。这是一场噩梦。
我希望保留这些有效格式,而那些未被识别为有效格式的格式应该返回一年或不返回。
这是我到目前为止的地方:
df['date_col'].date_format('%Y-%m-%d')
我发现正则表达式只匹配年份字段,但我坚持在^[0-9]{2,2}$
我尝试过dateutil但没有成功。它拒绝用月份解析示例
答案 0 :(得分:0)
我不熟悉名为date_format
的DataFrame或Series方法,而且你的正则表达式似乎没有为我返回年份。除此之外,我建议定义一个可以处理任何这些格式的函数,并将其映射到日期列。像这样:
df
date
0 20/20/1999
1 31/2014
2 2015
3 2008-01-01 00:00:00
4 1903-10-31 00:00:00
5 1900-01-20 00:00:00
6 2011-02-21 00:00:00
7 1999-10-11 00:00:00
def convert_dates(x):
try:
out = pd.to_datetime(x)
except ValueError:
x = re.sub('^[0-9]{,2}/', '', x)
out = pd.to_datetime(x)
return out
df.date.map(convert_dates)
0 1999-01-01
1 2014-01-01
2 2015-01-01
3 2008-01-01
4 1903-10-31
5 1900-01-20
6 2011-02-21
7 1999-10-11
Name: date, dtype: datetime64[ns]
当然,此函数不处理不包含一年的字符串,但您的示例未能包含此示例。