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

Pandas与Numpy报错:TypeError无法解包非可迭代int对象求解决

问题:Streamlit中遍历列表触发TypeError:无法解包非可迭代int对象

我是机器学习新手,以下代码在Jupyter Notebook中可正常输出预期结果,但在Streamlit运行时触发TypeError错误,提示无法解包非可迭代int对象,问题出在遍历ratings列表的循环处。

相关代码

df = pd.read_csv("book1.csv")
corrMatrix = df.corr(method='pearson')
corrMatrix.head(17)

def get_similar(question, rating):
    similar_ratings = corrMatrix[question] * (rating - 2.5)
    similar_ratings = similar_ratings.sort_values(ascending=False)
    return similar_ratings

ratings = [(q1), (q2), (q3), (q4), (q5), (q6), (q7), (q8), (q9), (q10),
           (q11), (q12), (q13), (q14), (q15), (q16), (q17)]

similar = pd.DataFrame()

for question, rating in ratings:
     similar.append(get_similar(question, rating), ignore_index=True)
     similar.head(10)
     similars = similar.sum().sort_values(ascending=False).head(3)
     df1 = pd.DataFrame(similar)

st.write(df1)

报错信息

Traceback (most recent call last):
File "c:\users\admin\desktop\thesissys\venv\lib\site-packages\streamlit\scriptrunner\script_runner.py", line 554, in _run_script
exec(code, module.__dict__)
File "C:\Users\admin\Desktop\ThesisSys\venv\app.py", line 71, in <module>
show_predict()
File "C:\Users\admin\Desktop\ML\venv\predict_page.py", line 386, in show_predict
for question, rating in ratings:
TypeError: cannot unpack non-iterable int object

解决方案

问题出在ratings列表的定义上:你现在的写法里,每个元素是单个变量(比如(q1)等价于q1,括号没有实际作用),而循环for question, rating in ratings:需要每个元素是包含两个值的可迭代对象(比如元组)才能解包成两个变量。

修改方法:把ratings的每个元素改成二元组,确保每个元素包含对应的问题标识和评分两个值。比如如果q1是问题名称,对应的评分是r1,写法应该是:

ratings = [(q1, r1), (q2, r2), (q3, r3), ..., (q17, r17)]

之所以Jupyter里能运行,大概率是你当时的q1等变量本身就是包含两个值的元组,而在Streamlit环境中这些变量变成了单个整数,导致循环解包失败。调整ratings的元素结构后就能解决这个错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 02:21:17