将6位数字的日期格式转换为标准的熊猫格式之一

时间:2019-12-04 07:09:14

标签: python-3.x pandas datetime

我正在使用一个数据帧,其中有一个杂乱的date列,具有不规则格式,即:

          date
0      19.01.01
1      19.02.01
2   1991/01/01
3   1996-01-01
4   1996-06-30
5   1995-12-31
6   1997-01-01

是否可以将其转换为代表XXXX-XX-XX的标准格式year-month-date?谢谢。

          date
0   2019-01-01
1   2019-02-01
2   1991-01-01
3   1996-01-01
4   1996-06-30
5   1995-12-31
6   1997-01-01

4 个答案:

答案 0 :(得分:2)

这取决于格式,最通用的解决方案是指定每种格式并使用Series.combine_first

date1 = pd.to_datetime(df['date'], format='%y.%m.%d', errors='coerce')
date2 = pd.to_datetime(df['date'], format='%Y/%m/%d', errors='coerce')
date3 = pd.to_datetime(df['date'], format='%Y-%m-%d', errors='coerce')

df['date'] = date1.combine_first(date2).combine_first(date3)
print (df)

        date
0 2019-01-01
1 2019-02-01
2 1991-01-01
3 1996-01-01
4 1996-06-30
5 1995-12-31
6 1997-01-01

答案 1 :(得分:1)

尝试以下

 df['date'].replace('\/|.','-', regex=True)

答案 2 :(得分:1)

pd.to_datetimeyearfirst=True一起使用

例如:

df = pd.DataFrame({"date": ['19.01.01', '19.02.01', '1991/01/01', '1996-01-01', '1996-06-30', '1995-12-31', '1997-01-01']})
df['date'] = pd.to_datetime(df['date'], yearfirst=True).dt.strftime("%Y-%m-%d")
print(df)

输出:

         date
0  2019-01-01
1  2019-02-01
2  1991-01-01
3  1996-01-01
4  1996-06-30
5  1995-12-31
6  1997-01-01

答案 3 :(得分:0)

使用pd.to_datetime()

pd.to_datetime(df['date])

输出:

0   2001-01-19
1   2001-02-19
2   1991-01-01
3   1996-01-01
4   1996-06-30
5   1995-12-31
6   1997-01-01
Name: 0, dtype: datetime64[ns]