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

如何在循环中填充DataFrame并保证tmax数据可正常绘图

错误根因

  1. 你当前将每个站点完整的tmax序列(Series对象)作为单个元素存入LargeFrame的tmax列,导致该列数据类型为object,没有可直接绘图的数值,因此触发报错。
  2. 原绘图代码逻辑存在问题:for j in LargeFrame遍历的是DataFrame的列名(即tmax、meanmax两个列),而非遍历站点,和需求预期不符。

推荐解决方案

根据你的使用场景,可选择以下两种常用的DataFrame组织方式:

方案1:长表结构(适合分组统计、单站点独立分析)

该结构下每行对应单站点单日的气温数据,同时保留站点的整体平均温,后续统计、绘图灵活性最高:

import pandas as pd

d = []
for station_name, df in TempDict.items():
    # 转换tmax为数值类型
    df['tmax'] = pd.to_numeric(df['tmax'], errors='coerce')
    # 计算站点平均最高温
    mean_max = df['tmax'].mean()
    # 追加站点标识、平均温字段
    df['station'] = station_name
    df['meanmax'] = mean_max
    d.append(df)
# 合并为全量长表
LargeFrame = pd.concat(d, ignore_index=True)

绘图方式:按站点分组遍历绘图即可

for station, group in LargeFrame.groupby('station'):
    # 把x替换为你数据中存储日期的列名即可
    group.plot(x='date', y='tmax', title=f"{station} 最高温时序")

方案2:宽表结构(适合多站点时序对比)

该结构下每列对应一个站点的tmax序列,可直接批量绘制所有站点的对比曲线,平均温单独存储:

import pandas as pd

tmax_wide = pd.DataFrame()
mean_max_dict = {}
for station_name, df in TempDict.items():
    tmax = pd.to_numeric(df['tmax'], errors='coerce')
    tmax_wide[station_name] = tmax
    mean_max_dict[station_name] = tmax.mean()
# 平均温可单独存为Series
mean_max_series = pd.Series(mean_max_dict, name='meanmax')

绘图方式:直接调用plot方法即可一次性生成所有站点的对比曲线

tmax_wide.plot(title="各站点最高温对比")

临时兼容方案(不改动原存储结构)

如果你一定要保留原有的「每行对应一个站点,单元格存完整tmax序列」的存储结构,只需修改绘图代码,取出每个单元格内的Series再绘图即可:

# 遍历站点索引而非列
for station in LargeFrame.index:
    LargeFrame.loc[station, 'tmax'].plot(title=station)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 19:06:00