从Excel

时间:2018-01-05 16:09:59

标签: python pandas date

所以我有这个数据集:

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排列作为分隔符并且缺少月份或日期。这是一场噩梦。

我希望保留这些有效格式,而那些未被识别为有效格式的格式应该返回一年或不返回。

这是我到目前为止的地方:

  1. 我从excel导入
  2. df['date_col'].date_format('%Y-%m-%d')
  3. 我发现正则表达式只匹配年份字段,但我坚持在^[0-9]{2,2}$

    上使用它的内容

    我尝试过dateutil但没有成功。它拒绝用月份解析示例

1 个答案:

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

当然,此函数不处理不包含一年的字符串,但您的示例未能包含此示例。