Python读取CSV格式不统一日期特征及绘图报错解决
混合格式日期字段处理方案
报错核心原因
当前代码中date列始终为原始字符串/数值类型,没有转换为pandas可识别的标准日期类型。后续绘图生成时间轴时,pandas需要对时间值做数值层面的计算,无法直接对字符串执行除法等数值运算,因此触发TypeError: unsupported operand type(s) for /: 'str' and 'int'报错。
具体处理步骤
- 第一步:统一识别三类不规则日期,转换为标准datetime类型
针对现有三种格式(纯年份、日.月.年、月.年),可通过格式特征做精准匹配,避免pandas默认模糊识别的错判问题:
注:对仅保留年/月的残缺日期,统一取对应周期的1号作为代表值,是时间维度分析的通用处理规则,不会影响时间排序、趋势对比的结果。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) - 第二步:执行原有数据清洗、排序逻辑
待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
相关产品推荐
相关产品推荐

