大佬教程收集整理的这篇文章主要介绍了从包含两个日期的字符串的 Pandas 单元格创建日期列表,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个包含日期范围字符串的数据框,看起来像这样:
winter easter pentecost summer
1 01.02. - 06.02. 31.03. - 10.04. 14.05.+25.05. 07.07. - 21.08.
现在我想生成这些范围内所有日期的列表。是否有比对每一行执行以下操作更 Pythonic 的解决方案:
def add_years(d,years):
"""
credits: https://stackoverflow.com/a/15743908/12934163
"""
try:
return d.@R_944_9363@ce(year = d.year + years)
except ValueError:
return d + (date(d.year + years,1,1) - date(d.year,1))
holIDays_List = []
for col in holIDays.columns:
if holIDays[col].str.contains('\+',na=TruE).values[0]:
days_List = holIDays[col].values[0].split('+')
date_Strings = [s + '2010' for s in days_List]
holIDays_List.extend([datetiR_698_11845@e.strptime(date,"%d.%m.%Y").date() for date in date_Strings])
else:
days_List = holIDays[col].str.split('-',1).toList()
days_List = [x.Strip(' ') for x in days_List[0]]
date_Strings = [s + '2010' for s in days_List]
date_dates = [datetiR_698_11845@e.strptime(date,"%d.%m.%Y").date() for date in date_Strings]
if Date_dates[0] > date_dates[1]:
date_dates[1] = add_years(date_dates[1],1)
dates_between = List(pd.date_range(date_dates[0],date_dates[1],freq='d'))
ferIEn_Liste.extend(dates_between)
并将每一列的值附加到一个列表中?如您所见,某些列包含 +
而不是 -
,这意味着它不是一个范围,而是两天。此外,有时范围超过一年,比如 23.12. - 01.01
您可以使用正则表达式来识别日期模式并从中提取日和月值。将此代码放在一个函数中以应用于您的数据框列,如下所示(注意我在您的 2 个案例中使用的 pat1
和 pat2
正则表达式):
def parse_date_patterns(pattern):
pat1 = '(\d*).(\d*).\s*\-\s*(\d*).(\d*).'
pat2 = '(\d*).(\d*).\s*\+\s*(\d*).(\d*).'
if '-' in pattern:
day_start,month_start,day_end,month_end = re.findall(pat1,pattern)[0]
list_dates = pd.date_range(start='{m}.{D}.2010'.format(m=month_start,d=day_start),end='{m}.{D}.2010'.format(m=month_end,d=day_end)).tolist()
elif '+' in pattern:
day_start,month_end = re.findall(pat2,pattern)[0]
list_dates = [pd.to_datetiR_698_11845@e('{m}.{D}.2010'.format(m=month_start,d=day_start)),pd.to_datetiR_698_11845@e('{m}.{D}.2010'.format(m=month_end,d=day_end))]
return list_dates
然后您可以将此函数应用于数据框的所有列:
df['winter'] = df.winter.apply(parse_date_patterns)
df['easter'] = df.easter.apply(parse_date_patterns)
df['pentecost'] = df.pentecost.apply(parse_date_patterns)
df['summer'] = df.summer.apply(parse_date_patterns)
您的数据框现在将在每行中包含所需的日期列表:
>>> print(df)
winter easter pentecost summer
0 [2010-02-01 00:00:00,2010-02-02 00:00:00,201... [2010-03-31 00:00:00,2010-04-01 00:00:00,201... [2010-05-14 00:00:00,2010-05-25 00:00:00] [2010-07-07 00:00:00,2010-07-08 00:00:00,201...
以上是大佬教程为你收集整理的从包含两个日期的字符串的 Pandas 单元格创建日期列表全部内容,希望文章能够帮你解决从包含两个日期的字符串的 Pandas 单元格创建日期列表所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。