如何用Python计算指定时间范围内ARD的月度计数与平均值
报错根因
你的代码在循环里把原本是年份字符串的x变量重新赋值为整数1,调用list_to_string函数时传入了整数类型的参数,字符串join方法要求所有元素都是字符串类型,因此触发类型报错。同时你手写三重循环遍历年月日的逻辑冗余且容易出错,直接用pandas内置的分组聚合功能可以高效实现需求。
可直接运行的实现代码
import pandas as pd # 读取原始数据,你原始列名是ARB,这里统一改成需求里的ARD data = pd.read_csv('ARD.txt', delimiter="\t") data.columns = ['Date', 'ARD'] # 处理日期列:先去掉日期末尾的点,再切片取前7位得到YYYY.MM格式的年月 data['year_month'] = data['Date'].str.rstrip('.').str[:7] # 按年月分组统计:当月事件总数、当月ARD平均值 grouped = data.groupby('year_month').agg( event_count=('ARD', 'count'), avg_value=('ARD', 'mean') ).reset_index() # 生成2011-2021年所有月份的完整列表,用来补全无数据的月份 all_months = [] for year in range(2011, 2022): for month in range(1, 13): all_months.append(f"{year}.{month:02d}") full_date_df = pd.DataFrame({'year_month': all_months}) # 合并统计结果,无数据的月份自动填充0 result = full_date_df.merge(grouped, on='year_month', how='left').fillna(0) result['event_count'] = result['event_count'].astype(int) # 输出结果到文件,格式完全符合你的要求 result.to_csv('monthly_ard_result.txt', sep=' ', header=False, index=False) # 也可以直接在控制台打印查看结果 print(result.to_string(header=False, index=False))
实现效果
- 输出文件每一行严格按照要求格式:第一列为
YYYY.MM格式的年月,第二列为当月ARD事件数,第三列为当月ARD平均值 - 无ARD事件的月份会自动输出
0 0 - 不需要手动处理日期匹配逻辑,pandas自动完成所有统计和补全操作
内容的提问来源于stack exchange,提问作者Dávid Kókai
相关产品推荐
相关产品推荐

