首页 文章

如何将Pandas数据框中的日期转换为'date'数据类型?

提问于
浏览
64

我有一个Pandas数据框,其中一列包含格式为'YYYY-MM-DD'的日期字符串,例如“2013年10月28日” .

目前,列的dtype是'object' .

如何将列值转换为Pandas日期格式?

5 回答

  • 82

    使用astype

    In [31]: df
    Out[31]: 
       a        time
    0  1  2013-01-01
    1  2  2013-01-02
    2  3  2013-01-03
    
    In [32]: df['time'] = df['time'].astype('datetime64[ns]')
    
    In [33]: df
    Out[33]: 
       a                time
    0  1 2013-01-01 00:00:00
    1  2 2013-01-02 00:00:00
    2  3 2013-01-03 00:00:00
    
  • 62

    本质上相当于@waitingkuo,但我会在这里使用 to_datetime (看起来更清洁,并提供一些额外的功能,例如 dayfirst ):

    In [11]: df
    Out[11]:
       a        time
    0  1  2013-01-01
    1  2  2013-01-02
    2  3  2013-01-03
    
    In [12]: pd.to_datetime(df['time'])
    Out[12]:
    0   2013-01-01 00:00:00
    1   2013-01-02 00:00:00
    2   2013-01-03 00:00:00
    Name: time, dtype: datetime64[ns]
    
    In [13]: df['time'] = pd.to_datetime(df['time'])
    
    In [14]: df
    Out[14]:
       a                time
    0  1 2013-01-01 00:00:00
    1  2 2013-01-02 00:00:00
    2  3 2013-01-03 00:00:00
    
  • 21

    我想很多数据都是从CSV文件进入Pandas的,在这种情况下,您可以在初始CSV读取期间简单地转换日期:

    dfcsv = pd.read_csv('xyz.csv', parse_dates=[0]) 其中0表示日期所在的列 .
    如果您希望将日期作为索引,也可以在其中添加 , index_col=0 .

    http://pandas.pydata.org/pandas-docs/stable/generated/pandas.io.parsers.read_csv.html

  • 16

    现在你可以做 df['column'].dt.date

    请注意,对于datetime对象,如果你没有看到它们都是00:00:00的小时,那就不是pandas . 这是iPython笔记本试图让事情看起来很漂亮 .

  • 0

    情况可能是日期需要转换为不同的频率 . 在这种情况下,我建议按日期设置索引 .

    #set an index by dates
    df.set_index(['time'], drop=True, inplace=True)
    

    在此之后,您可以更轻松地转换为您最需要的日期格式类型 . 下面,我按顺序转换为多种日期格式,最终以月初的一组日期日期结束 .

    #Convert to daily dates
    df.index = pd.DatetimeIndex(data=df.index)
    
    #Convert to monthly dates
    df.index = df.index.to_period(freq='M')
    
    #Convert to strings
    df.index = df.index.strftime('%Y-%m')
    
    #Convert to daily dates
    df.index = pd.DatetimeIndex(data=df.index)
    

    为简洁起见,我没有表明我在上面的每一行之后运行以下代码:

    print(df.index)
    print(df.index.dtype)
    print(type(df.index))
    

    这给了我以下输出:

    Index(['2013-01-01', '2013-01-02', '2013-01-03'], dtype='object', name='time')
    object
    <class 'pandas.core.indexes.base.Index'>
    
    DatetimeIndex(['2013-01-01', '2013-01-02', '2013-01-03'], dtype='datetime64[ns]', name='time', freq=None)
    datetime64[ns]
    <class 'pandas.core.indexes.datetimes.DatetimeIndex'>
    
    PeriodIndex(['2013-01', '2013-01', '2013-01'], dtype='period[M]', name='time', freq='M')
    period[M]
    <class 'pandas.core.indexes.period.PeriodIndex'>
    
    Index(['2013-01', '2013-01', '2013-01'], dtype='object')
    object
    <class 'pandas.core.indexes.base.Index'>
    
    DatetimeIndex(['2013-01-01', '2013-01-01', '2013-01-01'], dtype='datetime64[ns]', freq=None)
    datetime64[ns]
    <class 'pandas.core.indexes.datetimes.DatetimeIndex'>
    

相关问题