You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python如何不硬编码列索引自动定位CSV中TMAX和TMIN列读取数据

实现自动匹配CSV字段索引的修改方案

核心思路

  • 读取CSV表头后,直接通过list.index()方法动态获取DATE、TMAX、TMIN三个字段的索引位置,完全抛弃硬编码的列号
  • 修正原参考代码的缩进错误(原代码中数据校验和插入逻辑不在for循环内,导致仅处理最后一行数据,这也是你之前图表无法正常展示的主要原因)
  • 移除硬编码的坐标轴范围配置,让matplotlib自动适配不同地区的温度区间

修改后完整代码

import csv
import matplotlib.pyplot as plt
from datetime import datetime

# 切换不同CSV文件只需修改文件名即可
filename = 'data/sitka_2018_simple.csv'
with open(filename) as f:
    reader = csv.reader(f)
    header_row = next(reader)
    
    # 动态获取所需字段的列索引
    date_idx = header_row.index('DATE')
    tmax_idx = header_row.index('TMAX')
    tmin_idx = header_row.index('TMIN')
    name_idx = header_row.index('NAME') # 可选:用于动态生成标题
    
    dates, highs, lows = [], [], []
    location_name = ""
    for row in reader:
        # 取第一行的地点名称即可
        if not location_name:
            location_name = row[name_idx]
        current_date = datetime.strptime(row[date_idx], '%Y-%m-%d')
        try:
            high = int(row[tmax_idx])
            low = int(row[tmin_idx])
        except ValueError:
            print(f"Missing data for {current_date}")
        else:
            dates.append(current_date)
            highs.append(high)
            lows.append(low)

# 绘制高低温曲线
plt.style.use('seaborn')
fig, ax = plt.subplots()
ax.plot(dates, highs, c='red', alpha=0.5)
ax.plot(dates, lows, c='blue', alpha=0.5)
ax.fill_between(dates, highs, lows, facecolor='blue', alpha=0.1)

# 图表格式配置
title = f"Daily high and low temps - 2018\n{location_name}"
ax.set_title(title, fontsize=20)
ax.set_xlabel('', fontsize=16)
fig.autofmt_xdate()
ax.set_ylabel("Temperature (F)", fontsize=16)
ax.tick_params(axis='both', which='major', labelsize=16)

plt.show()

关键修改说明

  1. 动态获取列索引:读取表头后通过index()方法自动定位所需字段位置,不受CSV字段排序影响
  2. 修正缩进:将日期转换、数据校验、列表插入的逻辑全部放到for循环内部,保证逐行处理数据
  3. 删除硬编码的坐标轴配置,避免不同地区数据超出预设范围导致显示异常
  4. 新增自动读取地点名称的逻辑,切换CSV文件时标题可以自动适配对应地点

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 01:30:04