【问题标题】:How to convert two different date formats from a pandas dataframe column into same format?如何将熊猫数据框列中的两种不同日期格式转换为相同格式?
【发布时间】:2020-05-31 15:07:44
【问题描述】:

我在 pandas 列中有两种不同的日期格式,例如 - DD-MM-YYYYMM/DD/YYYY,我想将它们转换为相同的格式。

我尝试使用代码 -

data['SALE DATE'] = pd.to_datetime(data['SALE DATE']).dt.strftime('%m/%d/%Y')

但这会将日期转换为 DD/MM/YYYYMM/DD/YYYY 进入输出 - data['SALE DATE']

我想要一个 python 解决方案来解决这个问题。任何线索都会非常有帮助。

【问题讨论】:

  • 能否请您提供一些源数据以及一些预期输出?
  • 对不起,我已经在问题中添加了示例输入和输出

标签: python pandas date date-formatting


【解决方案1】:

如果您使用的是 pandas 1+ 版本,您可以使用以下解决方案:

pd.to_datetime(["11-08-2018", "05-03-2016", "08/30/2017", "09/21/2018"], infer_datetime_format=True, dayfirst=True).strftime("%m/%d/%Y")

这给出了以下结果:

Index(['08/11/2018', '03/05/2016', '08/30/2017', '09/21/2018'], dtype='object')

这里的重要论点是dayfirst=True

您可以查看pd.to_datetime 文档了解更多信息

【讨论】:

    【解决方案2】:

    最直观的解决方法是写一个自定义的转换函数, 有点像:

    def myDateConv(tt):
        sep = tt[2]
        if sep == '-':
            return pd.to_datetime(tt, format='%d-%m-%Y')
        elif sep == '/':
            return pd.to_datetime(tt, format='%m/%d/%Y')
        else:
            return tt
    

    然后将其作为转换器传递给相关列:

    df = pd.read_csv('Input.csv', converters={'Date': myDateConv})
    

    我准备了一个 CSV 文件,它使用 read_csv 读取,没有任何 自定义转换器给出了原始内容和两列 对象类型:

             Date Input format
    0  03-05-2020   DD-MM-YYYY
    1  05/07/2020   MM/DD/YYYY
    

    但是用上面的转换器读取相同的文件给出了:

            Date Input format
    0 2020-05-03   DD-MM-YYYY
    1 2020-05-07   MM/DD/YYYY
    

    带有 datetime64[ns] 类型的 Date 列,并且两个日期都来自 五月,正如预期的那样。

    或者,如果您有来自其他来源的此 DataFrame,并且您想要 转换此列,运行:

    df.Date = df.Date.apply(myDateConv)
    

    【讨论】:

    • 非常感谢。解决了我的问题,我学会了如何解决这些问题:)
    猜你喜欢
    • 2018-11-17
    • 2015-03-25
    • 1970-01-01
    • 2018-01-13
    • 2016-10-29
    • 1970-01-01
    • 1970-01-01
    • 2019-01-20
    • 2023-03-07
    相关资源
    最近更新 更多