从日期时间对象中提取日期和月份

Posted

技术标签:

【中文标题】从日期时间对象中提取日期和月份【英文标题】: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 

【问题讨论】:

【参考方案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)

【讨论】:

以上是关于从日期时间对象中提取日期和月份的主要内容,如果未能解决你的问题,请参考以下文章

从Python日期中提取两位数的月份和日期[重复]

从jooq中的日期获取月份名称

如何从R中具有月份名称的时间戳中提取日期

从 pandas Dataframe 中提取月份数据

如何从 DataFrame 的日期列中提取月份名称和年份

如何从 MDX 查询中提取日期中的月份年份