基于字典聚合值,查询各地区上午9点湿度(第12列)最大值
解决按州聚合气象数据并查询上午9点相对湿度最大值的问题
嘿,我来帮你搞定这个气象数据处理的需求!我们可以用Python轻松实现按州聚合数据,同时找出每个州上午9点相对湿度的最大值。下面是两种不同场景的实现方案,你可以根据自己的需求选择:
方案一:直接跟踪最大值(高效省内存)
如果你的需求只是获取每个州的最大相对湿度,不需要保留所有原始数据,这个方案更高效,占用内存更少:
import csv # 初始化字典:键为州名,值为该州上午9点相对湿度的最大值 state_rh_max = {} # 读取CSV数据文件(替换成你的实际文件名) with open('weather_data.csv', 'r', newline='', encoding='utf-8') as csvfile: csv_reader = csv.reader(csvfile) # 跳过表头(如果你的CSV文件没有表头,注释掉这一行) next(csv_reader) for row in csv_reader: # 获取州名(第2列,索引从0开始为1) state = row[1] # 获取上午9点相对湿度(第13列,索引12),转换为浮点数 try: rh_9am = float(row[12]) except ValueError: # 遇到空值或无效数据时跳过该行 continue # 更新字典中的最大值:如果州不存在则添加,否则比较后替换更大的值 if state not in state_rh_max or rh_9am > state_rh_max[state]: state_rh_max[state] = rh_9am # 输出最终结果 print("每个州的上午9点相对湿度最大值:") for state, max_rh in state_rh_max.items(): print(f"{state}: {max_rh}%")
代码说明:
- 用
csv.reader逐行读取数据,避免一次性加载大文件到内存 - 用
try-except捕获无效数据,防止程序崩溃 - 字典
state_rh_max动态维护每个州的最大相对湿度,逻辑简单高效
方案二:先聚合所有数据再计算最大值(灵活扩展)
如果你之后还需要对每个州的所有气象数据做更多分析(比如统计最低温、降雨量等),可以先把所有数据按州聚合保存,再计算最大值:
import csv # 初始化字典:键为州名,值为该州的所有气象记录列表 state_weather_data = {} with open('weather_data.csv', 'r', newline='', encoding='utf-8') as csvfile: csv_reader = csv.reader(csvfile) # 读取表头,后续将每行数据转为字典形式,更易理解 headers = next(csv_reader) for row in csv_reader: state = row[1] # 将行数据与表头配对,转为字典,方便后续按字段名访问 weather_record = dict(zip(headers, row)) # 把上午9点相对湿度转为浮点数(可选,方便后续计算) try: weather_record['上午9点相对湿度(%)'] = float(weather_record['上午9点相对湿度(%)']) except ValueError: pass # 将记录添加到对应州的列表中 if state not in state_weather_data: state_weather_data[state] = [] state_weather_data[state].append(weather_record) # 从聚合的数据中计算每个州的上午9点相对湿度最大值 state_rh_max = {} for state, records in state_weather_data.items(): # 过滤出有效的相对湿度数值 valid_rh_values = [ rec['上午9点相对湿度(%)'] for rec in records if isinstance(rec['上午9点相对湿度(%)'], float) ] # 只有存在有效数据时才计算最大值 if valid_rh_values: state_rh_max[state] = max(valid_rh_values) # 输出结果 print("每个州的上午9点相对湿度最大值:") for state, max_rh in state_rh_max.items(): print(f"{state}: {max_rh}%")
代码说明:
- 先将所有数据按州聚合到字典中,每个州对应一个记录列表
- 记录以字典形式存储,可读性更强,后续扩展分析更方便
- 最后从聚合数据中过滤有效数值,计算最大值
内容的提问来源于stack exchange,提问作者D.Ronald
相关产品推荐
相关产品推荐

