Python Pandas – Datetime 仅在某些日期给出错误的输出

乘风 python 221

原文标题Python Pandas – Datetime gives wrong output only for certain dates

我有一个数据框,其中有一列日期为 MMDDYYY 格式。我想将日期转换为 YYYY-MM-DD 格式。这适用于大多数日期。但是对于从 1 开始的日期,会给出错误的输出。在此示例中,最后 3 行是错误的。有很多行,所以我无法硬编码正确的值。

 OriginalDates (MMDDYYYY)   OutputDates (YYYYMMDD)   ExpectedDates (YYYYMMDD)     Correct Output?
 5011989                    1989-05-01               1989-05-01                   Yes
 6011989                    1989-06-01               1989-06-01                   Yes
 12042009                   2009-12-04               2009-12-04                   Yes
 01012001                   2001-01-01               2001-01-01                   Yes
 1161955                    1955-11-06               1955-01-16                   No
 1051991                    1991-10-05               1991-01-05                   No
 1011933                    1933-10-01               1933-01-01                   No

我的代码:

df['OutputDates'] = pd.to_datetime(df['OriginalDates'], format='%m%d%Y')
df['OutputDates'] = pd.to_datetime(df['OutputDates'], format='%Y-%m-%d')
                

原文链接:https://stackoverflow.com//questions/71476979/python-pandas-datetime-gives-wrong-output-only-for-certain-dates

回复

我来回复
  • Ibrahim Ayoup的头像
    Ibrahim Ayoup 评论

    您可以使用字符串切片,而不是最干净的解决方案,但它可以满足您的要求:

    def format_date(x):
        if len(x) == 7:
            return x[-4:] + '-' + x[-6:3] + '-' + x[-8:1]
    
        if len(x) == 8:
            return(x[-4:] + '-' + x[2:4] + '-' + x[0:2])
        
    df['OriginalDates (MMDDYYYY)'] = df['OriginalDates (MMDDYYYY)'].apply(lambda x: format_date(str(x)))
    df['OriginalDates (MMDDYYYY)'] = pd.to_datetime(df['OriginalDates (MMDDYYYY)'], format='%Y-%d-%m') 
    
    2年前 0条评论