You need to enable JavaScript to run this app. Python读取CSV格式不统一日期特征及绘图报错解决
优惠活动
大模型
产品
解决方案
定价
更多

Python读取CSV格式不统一日期特征及绘图报错解决

混合格式日期字段处理方案

报错核心原因

当前代码中date列始终为原始字符串/数值类型,没有转换为pandas可识别的标准日期类型。后续绘图生成时间轴时,pandas需要对时间值做数值层面的计算,无法直接对字符串执行除法等数值运算,因此触发TypeError: unsupported operand type(s) for /: 'str' and 'int'报错。

具体处理步骤

  • 第一步:统一识别三类不规则日期,转换为标准datetime类型
    针对现有三种格式(纯年份、日.月.年、月.年),可通过格式特征做精准匹配,避免pandas默认模糊识别的错判问题:
    import pandas as pd
    from datetime import datetime
    
    def parse_mixed_date(raw_value):
        # 清理字符串前后的冗余空白,兼容CSV读入时自动识别为整数的纯年份值
        date_str = str(raw_value).strip()
        # 匹配纯4位的年份格式(如"2006"),默认补为当年1月1日
        if len(date_str) == 4 and date_str.isdigit():
            return datetime.strptime(date_str, "%Y")
        # 匹配双点分隔的日.月.年格式(如"2.5.2020")
        if date_str.count(".") == 2:
            return datetime.strptime(date_str, "%d.%m.%Y")
        # 匹配单点分隔的月.年格式(如"3.2012"),默认补为当月1日
        if date_str.count(".") == 1:
            return datetime.strptime(date_str, "%m.%Y")
        # 无法匹配的异常值统一标记为NaT空值
        return pd.NaT
    
    # 对date列应用解析函数完成类型转换
    dataframe["date"] = dataframe["date"].apply(parse_mixed_date)
    
    注:对仅保留年/月的残缺日期,统一取对应周期的1号作为代表值,是时间维度分析的通用处理规则,不会影响时间排序、趋势对比的结果。
  • 第二步:执行原有数据清洗、排序逻辑
    待date列完成标准化转换后,再运行原本的过滤、排序、索引设置代码:
    # 过滤掉转换失败的空值,按时间排序
    dataframe = dataframe[dataframe["date"].notna()].sort_values("date")
    # 将date设为时间索引
    dataframe.set_index("date", inplace=True)
    
  • 第三步:运行分组绘图逻辑
    注意将原代码中未定义的df替换为实际的数据集变量名dataframe,即可正常生成按学生分组的频率时间序列图:
    dataframe.groupby("Student_ID")["Freq"].plot(legend=True)
    

额外适配技巧

转换为标准datetime类型后,可直接通过pandas的时间聚合能力调整统计粒度,不需要再手动拆分字符串处理:比如要按月份聚合所有数据,只需在groupby中指定by=pd.Grouper(freq="M")即可完成重采样。

内容的提问来源于stack exchange,提问作者Lili

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.29 05:24:02