Python脚本遇TypeError:zip对象无len(),VSCode正常CMD报错
问题解决:TypeError: object of type 'zip' has no len()
问题场景
你编写的代码用于检查SG和PL列是否存在IT01+8的组合,存在则将PL列的8改为6:
cm_full_df['PL'] = np.where(cm_full_df.set_index(['SG', 'PL']).index.isin(zip(['IT01'],[8])), 6, cm_full_df['PL'])
这段代码在VS Code中正常运行,但在CMD控制台执行时抛出错误:
TypeError: object of type 'zip' has no len()
解决方案
将zip()返回的迭代器转换为列表,修改后的代码如下:
cm_full_df['PL'] = np.where(cm_full_df.set_index(['SG', 'PL']).index.isin(list(zip(['IT01'],[8]))), 6, cm_full_df['PL'])
原因说明
Python 3中zip()返回的是迭代器对象,而非列表。部分pandas版本在处理isin()方法时,会尝试获取传入对象的长度(调用len()),但迭代器没有这个方法,从而触发报错。
VS Code和CMD环境可能使用了不同版本的pandas或Python解释器配置:VS Code的环境中pandas能兼容迭代器参数,而CMD环境的pandas版本对参数类型要求更严格,必须传入具备len()方法的容器(比如列表)。将zip()结果转为列表后,就能满足所有环境的参数要求。
内容的提问来源于stack exchange,提问作者kawuel
相关产品推荐
相关产品推荐

