Python绘图报错TypeError:列表索引需为整数/切片而非元组求解决
解决TypeError: list indices must be integers or slices, not tuple问题
咱们先来揪出这个错误的根源:
你用zip(etiquet, divisasIndica)的时候,每次循环拿到的j是一个元组(比如第一次循环j是('EUR', df1),第二次是('USD', df1))。但你后面写了pares[j]和div[j],这就相当于用元组去当列表的索引——Python列表只认整数或者切片当索引,自然就给你抛出TypeError了。
其实zip已经帮你把标签和对应的DataFrame一一配对好了,直接在循环里把元组解包就行,根本不用再通过索引去取。下面是修正后的完整代码:
import plotly.graph_objects as go # 记得先导入plotly哦 etiquet=['EUR','USD'] divisasIndica=[df1, df1] def ch1(div, pares): # 直接解包zip返回的元组,拿到标签和对应的DataFrame for etiqueta, dfm in zip(div, pares): fig = go.Figure(data=[go.Candlestick( x=dfm['Date'], open=dfm['Open'], high=dfm['High'], low=dfm['Low'], close=dfm['Price'] )]) fig.update_layout( title=etiqueta, yaxis_title='Px', ) fig.show() ch1(etiquet, divisasIndica)
几个关键修改点:
- 把
for j in zip(div,pares):改成for etiqueta, dfm in zip(div, pares):,直接从配对里取出标签和数据框,省去索引操作 - 移除了没用的
dtm=pares[j]代码,直接用解包后的dfm和etiqueta - 补充了plotly的导入语句(如果你的代码里已经有了可以忽略)
如果你非要用索引的方式循环,也可以用enumerate,比如:
def ch1(div, pares): for idx in range(len(div)): etiqueta = div[idx] dfm = pares[idx] # 后面的绘图代码和上面一样
不过显然用zip解包的方式更简洁直观~
内容的提问来源于stack exchange,提问作者Pedro Puertas
相关产品推荐
相关产品推荐

