【问题标题】:Can I parse dates in different formats?我可以解析不同格式的日期吗?
【发布时间】:2019-04-27 08:48:00
【问题描述】:

我的一个合作者的数据中的日期格式不一致。

0   13/11/2016
1   21/01/2017
2   22/01/2017
3   2017-02-02
4   2016-12-11
5   13/11/2016
6   2016-12-12
7   21/01/2017
8   22/01/2017
9   2017-02-02

我希望能够将其解析为时间戳以便在 python 中进行分析。使用parse_dates = True 不起作用,我怀疑这是因为格式混合。

我可以解析不同格式的日期吗?

【问题讨论】:

  • 使用 try-except-ValueError 并按文件中每种可能的日期时间格式解析行。
  • 您的合作者是否同时发送美国和欧洲日期?如果是这样,你会如何评价01-02-2017?是 2017 年 2 月 1 日还是 2017 年 1 月 2 日?

标签: python pandas


【解决方案1】:

你可以使用to_datetime:

第一种格式(YYYY-MM-DD):

print (df)
        dates
0  13/11/2016
1  21/01/2017
2  22/01/2017
3  2017-02-02
4  2016-12-11
5  13/11/2016
6  2016-12-12
7  21/01/2017
8  22/01/2017
9  2017-02-02
9  2017-02-25 <- YYYY-MM-DD

dates = pd.to_datetime(df.dates)
print (dates)
0   2016-11-13
1   2017-01-21
2   2017-01-22
3   2017-02-02
4   2016-12-11
5   2016-11-13
6   2016-12-12
7   2017-01-21
8   2017-01-22
9   2017-02-02
9   2017-02-25
Name: dates, dtype: datetime64[ns]

第二种格式(YYYY-DD-MM

有点问题-to_datetime中需要参数formaterrors='coerce',最后combine_firstfillna

print (df)
        dates
0  13/11/2016
1  21/01/2017
2  22/01/2017
3  2017-02-02
4  2016-12-11
5  13/11/2016
6  2016-12-12
7  21/01/2017
8  22/01/2017
9  2017-02-02
9  2017-25-02 <- YYYY-DD-MM

dates1 = pd.to_datetime(df.dates, format='%d/%m/%Y', errors='coerce')
dates2 = pd.to_datetime(df.dates, format='%Y-%d-%m', errors='coerce')

dates = dates1.combine_first(dates2)
#dates = dates1.fillna(dates2)
print (dates)
0   2016-11-13
1   2017-01-21
2   2017-01-22
3   2017-02-02
4   2016-11-12
5   2016-11-13
6   2016-12-12
7   2017-01-21
8   2017-01-22
9   2017-02-02
9   2017-02-25
Name: dates, dtype: datetime64[ns]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-10
    • 2020-11-16
    • 2022-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多