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
相关产品推荐
相关产品推荐

