Python初学者作业求助:用Numpy实现CSV变量日平均值计算函数
解决思路与代码实现
我们可以用numpy完成这个任务,核心分为读取文件、分组统计、生成全年结果三个核心步骤,完全不用Pandas:
步骤说明
- 读取CSV并定位变量列:用
numpy读取文件,通过表头找到目标变量所在的列 - 按日期分组存值:用字典存储每天的所有变量数据,方便后续计算平均
- 生成365天结果:覆盖2021年全年每一天,确保结果刚好365个值
完整代码
import numpy as np def daily_average(data, csv_file_name1: str, variable: str): # 读取CSV文件,保留表头和所有数据 raw_data = np.genfromtxt( csv_file_name1, delimiter=' ', skip_header=0, dtype=None, encoding='utf-8' ) # 提取表头,找到目标变量的列索引 header = raw_data[0] try: var_col_idx = list(header).index(variable) except ValueError: raise ValueError(f"文件中不存在变量 {variable}") # 提取数据行(跳过表头) data_rows = raw_data[1:] # 用字典存储每天的变量值列表 daily_values = {} for row in data_rows: date = row[0] value = float(row[var_col_idx]) if date not in daily_values: daily_values[date] = [] daily_values[date].append(value) # 生成2021年全年的所有日期(平年刚好365天) start_date = np.datetime64('2021-01-01') end_date = np.datetime64('2021-12-31') all_dates = np.arange(start_date, end_date + np.timedelta64(1, 'D'), dtype='datetime64[D]') # 计算每天的平均值,缺失数据用NaN标记 daily_avg = [] for date in all_dates: date_str = str(date) if date_str in daily_values: daily_avg.append(np.mean(daily_values[date_str])) else: daily_avg.append(np.nan) return np.array(daily_avg)
代码细节解释
- 文件读取:
np.genfromtxt支持读取混合类型数据,能同时保留字符串格式的日期和数值型的变量数据 - 变量列定位:通过表头列表查找索引,避免硬编码列位置,适配不同的CSV结构
- 分组存储:字典的键是日期字符串,值是当天所有变量值的列表,方便后续批量计算均值
- 全年日期生成:用
numpy.datetime64生成连续日期,确保结果严格对应365天,不会遗漏或多算 - 缺失值处理:如果某天没有数据,返回
NaN表示缺失,你也可以根据需求改成0或其他默认值
使用示例
假设你的CSV文件名为weather_data.csv,要计算variable2的日平均值,调用方式如下:
avg_result = daily_average(None, "weather_data.csv", "variable2") print(avg_result)
注:函数签名中的
data参数看起来没有实际作用,调用时传入None即可,要是作业里的笔误,也可以直接删除这个参数
内容的提问来源于stack exchange,提问作者CawbyCop
相关产品推荐
相关产品推荐

