【问题标题】:time data doesn't match format specified when it seemed to be match时间数据与似乎匹配时指定的格式不匹配
【发布时间】:2021-01-06 07:13:52
【问题描述】:

我在 pandas 中有两个日期列的数据框:

>>>ID  name    start        end  
0  12  Tik     1/6/2020    None
1  32  Tak     12/31/2019  None
2  45  Tek     9/1/2019   1/30/2020
3  78  Tok     9/1/2019   1/29/2020

我正在尝试将这些日期转换为日期时间以采用 Y-m-d 格式,例如 2019 年 12 月 31 日将是 2019 年 12 月 31 日:

df[['start','end']] =df[['start','end']].apply(pd.to_datetime, format=''%Y-%m-%d'')

但每当我运行它时,我都会收到错误:

ValueError:时间数据 2020 年 1 月 6 日与指定的格式不匹配

我尝试过指定格式类似于给定日期(例如(d-m-Y):

df[['start','end']] =df[['start','end']].apply(pd.to_datetime, format=''%d-%m-%Y'')

>>>ValueError: time data '1/6/2020' does not match format '%d-%m-%Y' (match)

我已尝试按照此处第一个答案中的建议进行破解:How to change the datetime format in pandas 并首先转换为 datetime 然后使用 strftime 但在第一行中我得到了需要指定格式的错误。

我找不到发生这种情况的任何原因,可能是因为日期和月份没有两位数?

我的最终目标是将这些日期列转换为 %Y-%m-%d 格式

【问题讨论】:

    标签: python pandas datetime


    【解决方案1】:
    • 问题似乎是在格式周围使用了两组引号
      • ''...''
    • pandas.to_datetimeformat 参数指定列的当前格式,而不是所需的格式。
      • 这些日期的格式是'%m/%d/%Y'
    import pandas as pd
    
    # setup the dataframe
    df = pd.DataFrame({'ID': [12, 32, 45, 78], 'name': ['Tik', 'Tak', 'Tek', 'Tok'], 'start': ['1/6/2020', '12/31/2019', '9/1/2019', '9/1/2019'], 'end': [None, None, '1/30/2020', '1/29/2020']})
    
    # convert to datetime
    df[['start','end']] = df[['start','end']].apply(pd.to_datetime, format='%m/%d/%Y')
    
    # display(df)
       ID name      start        end
    0  12  Tik 2020-01-06        NaT
    1  32  Tak 2019-12-31        NaT
    2  45  Tek 2019-09-01 2020-01-30
    3  78  Tok 2019-09-01 2020-01-29
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-08
      • 2021-03-31
      • 1970-01-01
      相关资源
      最近更新 更多