【问题标题】:Pandas: How to format Series to Datetime when it has multiple date formats熊猫:当它有多种日期格式时,如何将系列格式化为日期时间
【发布时间】:2020-07-31 18:27:56
【问题描述】:

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

上下文

我无法控制我们如何接收此数据集。不幸的是,我们的客户使用%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 异常处理程序没有遍历每一行。我知道我可以自己循环遍历每一行,但这绝对不是最有效的方式。

【问题讨论】:

标签: python python-3.x pandas datetime formatting


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    pandas to_datetime 很好地解析了您示例中的字符串:

    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'])
    
    pd.to_datetime(dates_str, dayfirst=True)
    Out[2]: 
    0   2020-03-01
    1   2020-01-23
    2   2020-06-01
    3   2020-01-24
    4   2020-06-25
    5   2020-01-13
    dtype: datetime64[ns]
    

    【讨论】:

      猜你喜欢
      • 2021-09-22
      • 1970-01-01
      • 2021-10-21
      • 2020-11-16
      • 2019-02-24
      • 2022-06-13
      • 2020-12-16
      • 2015-01-21
      相关资源
      最近更新 更多