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

Plotly-Python中使用px.scatter触发InvalidIndexError的解决办法

问题描述

现有如下Pandas DataFrame:

dff8df      !!!0 WWSF   VPIP   VPIP   VPIP
0         52.0  38.64  38.64  38.64
1         62.0  50.00  50.00  50.00
2         73.0  56.25  56.25  56.25
3         99.0  23.08  23.08  23.08
4         30.0  41.67  41.67  41.67
..         ...    ...    ...    ...
540       50.0  18.75  18.75  18.75
541       99.0  26.32  26.32  26.32
542       50.0  28.57  28.57  28.57
543       83.0  14.29  14.29  14.29
544       57.0  38.89  38.89  38.89

[545 rows x 4 columns]

运行以下Plotly代码时触发错误:

print("dff8df",dff8)

figure = px.scatter(data_frame=dff8,
               x=dff8[:,drop1],
               y=dff8[:,drop2],
               color=dff8[:,drop4],
               size=dff8[:,drop3],
               trendline="ols",
               trendline_color_override="red",
               title="%s vs %s"%(drop1, drop2),
               )

错误信息:

pandas.errors.InvalidIndexError: (slice(None, None, None), 'VPIP')
解决方案

1. 核心错误原因

  • Pandas DataFrame不支持[:, 列名]这种混合切片语法(这是NumPy数组的用法),直接使用会触发索引错误。
  • DataFrame存在重复列名(多个VPIP),会进一步导致索引歧义。

2. 修正步骤

步骤1:重命名重复列

先给重复的VPIP列赋予唯一名称,避免索引混乱:

# 重命名所有列,确保名称唯一
dff8.columns = ['!!!0 WWSF', 'VPIP_1', 'VPIP_2', 'VPIP_3']

步骤2:调整Plotly代码的列引用方式

Plotly Express的px.scatter可以直接通过列名字符串从data_frame中取数,无需手动切片。修正后的代码如下:

# 假设drop1、drop2、drop3、drop4是重命名后的列名(比如drop1='!!!0 WWSF',drop2='VPIP_1'等)
figure = px.scatter(data_frame=dff8,
                   x=drop1,
                   y=drop2,
                   color=drop4,
                   size=drop3,
                   trendline="ols",
                   trendline_color_override="red",
                   title=f"{drop1} vs {drop2}",
                   )

补充:如果需要按位置索引列

如果drop1等变量存储的是列的位置索引(而非列名),可以用iloc来取列:

figure = px.scatter(data_frame=dff8,
                   x=dff8.iloc[:, drop1],
                   y=dff8.iloc[:, drop2],
                   color=dff8.iloc[:, drop4],
                   size=dff8.iloc[:, drop3],
                   trendline="ols",
                   trendline_color_override="red",
                   title=f"{dff8.columns[drop1]} vs {dff8.columns[drop2]}",
                   )

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 16:51:34