如何将熊猫数据框列中的两种不同的日期格式转换为相同的格式?

问题描述 投票:0回答:2

我在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进入输出-数据['SALE DATE']

enter image description here

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

python pandas date date-formatting
2个回答
0
投票

最直观的解决方案是编写自定义转换功能,有点像:

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

然后将其作为converter传递给所讨论的列:

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]类型的[[带有日期]列,并且两个日期都来自可以,按预期。


0
投票

如果使用的是熊猫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

© www.soinside.com 2019 - 2024. All rights reserved.