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

按分隔符生成Pandas DataFrame后下标访问报错的解决方法

解决dict_values无法下标访问的问题

问题根源

你触发的TypeError: 'dict_values' object is not subscriptable,是因为Python 3中dict.values()返回的是字典值视图对象——它是动态反映字典变化的迭代器,不是可直接用索引访问的列表类型。

三种可行解决方案

1. 将视图对象转为列表

直接把dfs.values()转成列表,就能用索引访问任意位置的DataFrame:

# 获取第一个DataFrame
first_df = list(dfs.values())[0]
# 用于绘图
axs1.errorbar(x=first_df['x_column'], y=first_df['y_column'], yerr=first_df['error_column'])

2. 用next(iter())直接取第一个值(更高效)

不需要转换整个列表,直接通过迭代器取第一个元素,性能更优:

first_df = next(iter(dfs.values()))
axs1.errorbar(x=first_df['x_column'], y=first_df['y_column'], yerr=first_df['error_column'])

3. 直接通过字典键访问(推荐)

如果你的字典dfs是用有意义的键命名的(比如按数据块编号/名称),直接用键访问会更清晰、更不易出错:

# 假设第一个数据块的键是'block_0'
axs1.errorbar(x=dfs['block_0']['x_column'], y=dfs['block_0']['y_column'], yerr=dfs['block_0']['error_column'])

完整示例代码

import pandas as pd
import matplotlib.pyplot as plt

# 读取并分割文本数据为多个DataFrame
with open('your_dataset.txt', 'r') as f:
    raw_content = f.read()
# 按分隔符分割,过滤空块
data_blocks = [block.strip() for block in raw_content.split('-------') if block.strip()]

# 存入字典
dfs = {}
for idx, block in enumerate(data_blocks):
    df = pd.read_csv(pd.io.common.StringIO(block))
    dfs[f'data_block_{idx}'] = df

# 选择任意一种方式获取DataFrame并绘图
# 方式1:转列表
first_df = list(dfs.values())[0]
# 方式2:迭代器取值
# first_df = next(iter(dfs.values()))
# 方式3:键访问
# first_df = dfs['data_block_0']

fig, axs1 = plt.subplots()
axs1.errorbar(x=first_df['x'], y=first_df['y'], yerr=first_df['y_error'], fmt='o-')
plt.show()

内容的提问来源于stack exchange,提问作者Py-ser

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 21:32:09