You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 20:36:18