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

Python for循环数据类型适配:DataFrame列名绘图索引错误解决

解决DataFrame列名循环绘制散点图时axs索引报错的问题

核心问题原因

axs是matplotlib生成的子图数组,仅支持整数、切片等数值型索引,而你用字符串类型的列名去索引,必然触发IndexError。不需要修改y = DataImport.loc[:,col1]这行的逻辑,只需要把列名映射为对应的整数索引即可。

简洁解决方案

方法一:用enumerate同时获取整数索引和列名

直接在循环中同时拿到子图的整数索引和目标列名,是最直观的解决方式:

import matplotlib.pyplot as plt

# 提取第一列作为x轴数据
x_data = DataImport.iloc[:, 0]
# 创建21张子图,这里按7行3列排列,可按需调整布局
fig, axs = plt.subplots(7, 3, figsize=(16, 22))
# 将二维子图数组展平为一维,方便循环索引
axs = axs.flatten()

# 遍历除第一列外的所有列,同时获取索引和列名
for idx, col_name in enumerate(DataImport.columns[1:]):
    # 获取当前列的y轴数据(原逻辑完全保留)
    y_data = DataImport.loc[:, col_name]
    # 用整数索引idx访问对应子图,绘制散点图
    axs[idx].scatter(x_data, y_data)
    # 设置子图标题和坐标轴标签
    axs[idx].set_title(f'{DataImport.columns[0]} vs {col_name}')
    axs[idx].set_xlabel(DataImport.columns[0])
    axs[idx].set_ylabel(col_name)

# 自动调整子图间距
plt.tight_layout()
plt.show()

方法二:通过列名获取其在DataFrame中的位置索引

如果不想修改循环的迭代变量形式,可以用columns.get_loc()方法把列名转换成整数位置,再映射到子图索引:

import matplotlib.pyplot as plt

x_data = DataImport.iloc[:, 0]
fig, axs = plt.subplots(7, 3, figsize=(16, 22))
axs = axs.flatten()

# 保持原循环逻辑,用列名作为迭代变量
for col_name in DataImport.columns[1:]:
    # 获取当前列在DataFrame中的位置,减去1对应子图数组的索引(跳过第一列)
    subplot_idx = DataImport.columns.get_loc(col_name) - 1
    y_data = DataImport.loc[:, col_name]
    axs[subplot_idx].scatter(x_data, y_data)
    axs[subplot_idx].set_title(f'{DataImport.columns[0]} vs {col_name}')

plt.tight_layout()
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 21:06:05