首页 > 解决方案 > Pandas:当具有多种日期格式时,如何将系列格式化为日期时间

问题描述

我正在尝试将所有日期转换为 datetime 数据类型,但我有一个具有两种不同格式的系列。

语境

我无法控制我们如何接收这个数据集。%d/%m/%Y不幸的是,我们的客户使用格式将其发送给我们。我正在从 excel 导入数据,但 excel 格式化了一些日期,以便将其导入为 '%Y/%m/%d %H:%M:%S'。我将日期列转换为字符串,下面是我尝试过的。

我的代码


import pandas as pd

dates_str = pd.Series(['2020-03-01 00:00:00', '23/01/20', '2020-06-01 00:00:00', '24/01/20', '2020-06-25 00:00:00', '13/01/20'])

date_formats = ['%Y/%m/%d %H:%M:%S', '%d/%m/%Y']

for date_format in date_formats:
    try:
        dates_str = pd.to_datetime(arg=dates_str, format=date_format) # try to get the date
        break # if correct format, don't test any other formats
    except ValueError:
        pass # if incorrect format, keep trying other formats

我知道它不起作用的原因是 Try except 异常处理程序没有遍历每一行。我知道我可以自己循环遍历每一行,但这绝对不是最有效的方法。

标签: pythonpython-3.xpandasdatetimeformatting

解决方案


如果您在 dates_str 系列上应用 pd.to_datetime,它会将类型转换为 M8,这是一种特定的日期时间类型。这还不够好吗?:)


推荐阅读