我想要一个日期范围列表,其中每个元素都是'yyyymmdd'
格式字符串,例如:['20130226','20130227','20130228','20130301','20130302']
。
我可以使用pandas:
>>> 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,我需要做一些额外的格式转换,那么如何以一种简洁的方式做到这一点呢?
答案 0 :(得分:13)
使用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)
答案 1 :(得分:12)
或使用列表理解:
[d.strftime('%Y%m%d') for d in pandas.date_range('20130226','20130302')]
答案 2 :(得分:1)
对于仅daterange
,当您再次使用pandas
重新格式化日期时,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']
答案 3 :(得分:1)
简单,干净:直接使用熊猫date_range和strftime做到这一点:
pd.date_range(start='20130226',end='20130302',freq='D').strftime('%Y%m%d')
结果:
Index(['20130226', '20130227', '20130228', '20130301', '20130302'], dtype='object')