有没有办法在Python中以YearMonthDay
格式生成日期列表?我需要在2010年6月12日到2012年12月8日之间的每个星期六制作一个包含该格式日期的列表。
我尝试pandas.date_range('6/12/2010','12/8/2012', freq='W-SAT')
但我无法将生成的时间戳对象转换为上述格式。
答案 0 :(得分:2)
由于pandas 0.8 Timestamp
类型是标准库中标准datetime
类的子类。因此,您可以使用datetime.strftime
,
>>> [ d.strftime('%Y%m%d') for d in pandas.date_range('6/12/2010','12/8/2012', freq='W-SAT') ]
['20100612',
'20100619',
'20100626',
'20100703',
...
答案 1 :(得分:0)
是的,你拿datetime library并创建星期六的第一个作为date
对象。然后创建一个7天的timedelta
对象,并将其添加到第一个date
对象。继续添加,直到你到达上周六。
要从这些对象创建“yearmonthday”格式的字符串,最简单的方法是使用对象的.strftime()
方法。
答案 2 :(得分:0)
这样的事情可以用来获取日期(仅使用标准库中的datetime
)。
from datetime import date,timedelta
def first_sat_after(d):
for i in range(7):
new_day = d.replace(day = d.day + i)
if new_day.weekday() == 6:
return new_day
def weekday_range(d1,dend):
week = timedelta(days = 7)
yield d1
d2 = d1 + week
while d2 <= dend:
yield d2
d2 = d2 + week
那么你的程序看起来像是:
d1 = date(2010,6,12)
dend = date(2012,8,12)
date_strings = [ x.strftime('%Y%m%d') for x in weekday_range(first_sat_after(d1),dend) ]
答案 3 :(得分:0)
我认为你只想使用格式化(虽然不相信这需要pandas! - 查看dateutil或只使用内置的datetime模块):
>>> dr = pandas.date_range('6/12/2010','12/8/2012', freq='W-SAT')
>>> ['{:%B %d %Y}'.format(d) for d in dr[:5]]
['June 12 2010', 'June 19 2010', 'June 26 2010', 'July 03 2010', 'July 10 2010']
>>> ['{:%Y%m%d}'.format(d) for d in dr[:5]]
['20100612', '20100619', '20100626', '20100703', '20100710']