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

从字典创建pandas DataFrame后调用head()触发StopIteration错误问询

错误产生原因

  • 迭代df.groupby("Name")返回的record是固定长度为2的元组,结构为(分组键Name值, 该分组对应的DataFrame),你的代码将整个元组存入字典值列表,而非提取可用的分组数据本身。
  • pd.DataFrame.from_dict的orient='index'参数要求字典的值为可解析为单行数据的扁平结构,你存入的是嵌套了元组、DataFrame的多层结构,pandas尝试遍历解析这类非结构化嵌套对象时就会抛出StopIteration异常。
  • 冗余逻辑说明:groupby返回的分组键天然唯一,你写的if record[0] in my_dict判断永远不会触发append分支,属于无效代码。

修复方案

根据时间序列分析的常见需求,有两种常用修复方式:

方案1:生成所有股票数据拼接的长表结构

如果需要保留date、close、Name三列的长表结构做逐行分析,直接合并groupby的分组结果即可,不需要手动构建字典:

import pandas as pd
# 时间序列分析必须读取date列做时间标识,原代码遗漏了该字段
df = pd.read_csv('all_stocks_5yr.csv', usecols=["date", "close", "Name"])
# 提取每个分组的DataFrame直接合并
full_df = pd.concat([group for _, group in df.groupby("Name")], ignore_index=True)
full_df.head()

方案2:生成时间为行、股票代码为列的宽表结构

如果需要对齐时间轴,做多个股票的收盘价横向对比,直接用pivot_table转换即可:

import pandas as pd
df = pd.read_csv('all_stocks_5yr.csv', usecols=["date", "close", "Name"])
# 转换时间格式为pandas可识别的时间类型
df["date"] = pd.to_datetime(df["date"])
# 生成宽表
full_df = df.pivot_table(index="date", columns="Name", values="close")
full_df.head()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 13:54:01