代码之家  ›  专栏  ›  技术社区  ›  Umar.H

将对象转换为日期时间引发错误

  •  1
  • Umar.H  · 技术社区  · 6 年前

    由两部分组成的问题

    我想把一个列转换成一个datetime,这是一个简单的任务?正如我以前在不同的df上所做的那样,使用文档没有太多问题。

      df = pd.DataFrame({'date' : ['24 October 2018', '23 April 2018', '18 January 2018']})
        print(df)
        date
    0   24 October 2018
    1   23 April 2018
    2   18 January 2018
    

    我浏览了datetime文档,我认为这段代码可以将这个列(它是一个对象)转换成datetime

    df.date =  pd.to_datetime(df['date'], format="%d-%m-%Y",errors='ignore')
    

    ValueError: time data '24 April 2018' does not match format '%d-%m-%Y' (match)
    

    2 回复  |  直到 6 年前
        1
  •  1
  •   timgeb    6 年前

    您使用了错误的格式。 '24 October 2018' 使用 format="%d %B %Y" . 将列出格式说明符 here .

    编辑:-演示-

    >>> import pandas as pd
    >>> df = pd.DataFrame({'date':['24 October 2018', '23 April 2018', '18 January 2018']})
    >>> df.date = pd.to_datetime(df['date'], format="%d %B %Y")
    >>> 
    >>> df
            date
    0 2018-10-24
    1 2018-04-23
    2 2018-01-18
    >>>
    >>> df['date'][0]
    Timestamp('2018-10-24 00:00:00')
    >>> df['date'][0].month
    10
    

    >>> df['status'] = ['complete', 'complete', 'requested']
    >>> df
            date     status
    0 2018-10-24   complete
    1 2018-04-23   complete
    2 2018-01-18  requested
    >>>
    >>> df[df['status'] != 'complete']
            date     status
    2 2018-01-18  requested
    
        2
  •  0
  •   J. Doe    6 年前

    你可以用 pd.to_datetime 或者 datetime 图书馆

    import datetime as dt
    df['date'].apply(lambda x: dt.datetime.strptime(x,'%d %B %Y'))