如何使用Python Pandas创建“yyyymmdd”格式的日期字符串列表?

2024-03-29 06:31:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我想要一个日期范围列表,其中每个元素都是'yyyymmdd'格式的字符串,例如:['20130226','20130227','20130228','20130301','20130302']

我可以用熊猫来做:

>>> pandas.date_range('20130226','20130302')
<class 'pandas.tseries.index.DatetimeIndex'>
[2013-02-26 00:00:00, ..., 2013-03-02 00:00:00]
Length: 5, Freq: D, Timezone: None

但它是DatetimeIndex,我需要做一些额外的格式转换,所以如何以一种简洁的方式做到这一点?


Tags: 字符串元素pandas列表dateindex格式range
3条回答

使用format

>>> r = pandas.date_range('20130226','20130302')
>>> r.format(formatter=lambda x: x.strftime('%Y%m%d'))
['20130226', '20130227', '20130228', '20130301', '20130302']

或者使用map

>>> r.map(lambda x: x.strftime('%Y%m%d'))
array(['20130226', '20130227', '20130228', '20130301', '20130302'], dtype=object)

或者使用列表理解:

[d.strftime('%Y%m%d') for d in pandas.date_range('20130226','20130302')]

仅仅是一个daterangepandas将是一个过度的杀伤力,当您实际上再次必须使用datetime重新格式化日期时。下面的解决方案只是使用datetime来实现您的目的

import datetime
def date_range(start_dt, end_dt = None):
    start_dt = datetime.datetime.strptime(start_dt, "%Y%m%d")
    if end_dt: end_dt = datetime.datetime.strptime(end_dt, "%Y%m%d")
    while start_dt <= end_dt:
        yield start_dt.strftime("%Y%m%d")
        start_dt += datetime.timedelta(days=1)


[e for e in date_range('20130226','20130302')]
['20130226', '20130227', '20130228', '20130301', '20130302']

相关问题 更多 >