【问题标题】:Extract day and month from a datetime object从日期时间对象中提取日期和月份
【发布时间】:2019-01-07 06:40:27
【问题描述】:

我有一列日期为字符串格式'2017-01-01'。有没有办法使用 pandas 从中提取日期和月份?

我已将专栏转换为datetime dtype,但还没有弄清楚后面的部分:

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

df.dtypes: 
Date        datetime64[ns]

print(df)

         Date
0   2017-05-11
1   2017-05-12
2   2017-05-13 

【问题讨论】:

    标签: python python-3.x pandas datetime


    【解决方案1】:

    使用dt.daydt.month --- Series.dt

    df = pd.DataFrame({'date':pd.date_range(start='2017-01-01',periods=5)})
    df.date.dt.month
    Out[164]: 
    0    1
    1    1
    2    1
    3    1
    4    1
    Name: date, dtype: int64
    
    df.date.dt.day
    Out[165]: 
    0    1
    1    2
    2    3
    3    4
    4    5
    Name: date, dtype: int64
    

    也可以使用dt.strftime

    df.date.dt.strftime('%m')
    Out[166]: 
    0    01
    1    01
    2    01
    3    01
    4    01
    Name: date, dtype: object
    

    【讨论】:

      【解决方案2】:

      一个简单的表格:

      df['MM-DD'] = df['date'].dt.strftime('%m-%d')
      

      【讨论】:

      • 嗨,欢迎来到 Stack Overflow。在回答已经有很多答案的问题时,请务必添加一些额外的见解,说明为什么您提供的回复是实质性的,而不是简单地呼应原始发帖人已经审查过的内容。这在您提供的“纯代码”答案中尤其重要。
      【解决方案3】:

      使用dt获取列的datetime属性。

      In [60]: df = pd.DataFrame({'date': [datetime.datetime(2018,1,1),datetime.datetime(2018,1,2),datetime.datetime(2018,1,3),]})
      
      In [61]: df
      Out[61]:
              date
      0 2018-01-01
      1 2018-01-02
      2 2018-01-03
      
      In [63]: df['day'] = df.date.dt.day
      
      In [64]: df['month'] = df.date.dt.month
      
      In [65]: df
      Out[65]:
              date  day  month
      0 2018-01-01    1      1
      1 2018-01-02    2      1
      2 2018-01-03    3      1
      

      定时提供的方法:

      使用apply

      In [217]: %timeit(df['date'].apply(lambda d: d.day))
      The slowest run took 33.66 times longer than the fastest. This could mean that an intermediate result is being cached.
      1000 loops, best of 3: 210 µs per loop
      

      使用dt.date

      In [218]: %timeit(df.date.dt.day)
      10000 loops, best of 3: 127 µs per loop
      

      使用dt.strftime

      In [219]: %timeit(df.date.dt.strftime('%d'))
      The slowest run took 40.92 times longer than the fastest. This could mean that an intermediate result is being cached.
      1000 loops, best of 3: 284 µs per loop
      

      我们可以看到dt.day是最快的

      【讨论】:

        【解决方案4】:

        应该这样做:

        df['day'] = df['Date'].apply(lambda r:r.day)
        df['month'] = df['Date'].apply(lambda r:r.month)
        

        【讨论】:

          猜你喜欢
          • 2017-04-05
          • 2019-03-20
          • 1970-01-01
          • 2014-01-23
          • 2015-01-18
          • 1970-01-01
          • 2015-11-22
          • 2017-04-23
          • 1970-01-01
          相关资源
          最近更新 更多