如何将DataFrame中NBA赛季日期格式从'1996-97'转换为'1996-1997'?
解决NBA赛季格式转换问题
问题分析
你的数据列是字符串格式的赛季标识(如1996-97、1999-00),要转换成1996-1997、1999-2000的格式。之前的错误原因:
- 第一次用
pd.to_datetime时,format='%Y-%Y'完全不符合原数据格式(原数据后两位是短年份),且重复使用%Y会导致正则分组名称冲突,触发报错。 - 第二次直接用
.dt.strftime,但原列是字符串类型,不是datetime对象,所以无法使用.dt访问器。
正确解决方案
直接对字符串进行处理,无需转换为datetime类型(因为这是赛季区间,不是具体日期),两种实现方式:
方法1:用apply结合字符串拆分
def normalize_season(season_str): start_year, end_short = season_str.split('-') # 处理2000赛季的特殊情况 if end_short == '00': end_year = '2000' else: # 取起始年份的前两位拼接短年份,得到完整4位年份 end_year = f"{start_year[:2]}{end_short}" return f"{start_year}-{end_year}" all_seasons['Date'] = all_seasons['Date'].apply(normalize_season)
方法2:正则表达式替换
利用正则匹配分组,结合逻辑判断处理00的特殊情况:
import re def normalize_season(season_str): match = re.match(r'(\d{4})-(\d{2})', season_str) start_year = match.group(1) end_short = match.group(2) end_year = '2000' if end_short == '00' else f"{start_year[:2]}{end_short}" return f"{start_year}-{end_year}" all_seasons['Date'] = all_seasons['Date'].apply(normalize_season)
验证效果
处理后的数据列会将1996-97转为1996-1997,1999-00转为1999-2000,其他赛季格式也会统一规范。
内容的提问来源于stack exchange,提问作者piya omietimi
相关产品推荐
相关产品推荐

