从行长度不一的列表创建DataFrame报错:int对象无len()方法
解决TypeError: object of type 'int' has no len()问题
这个错误的根源是你的原始列表结构不一致——有的条目包含三元组和标签数字,有的却只有单个数字,而你的代码在处理这些条目时,可能默认每个元素都有可迭代/可计算长度的结构,碰到纯int类型就触发了len()错误。下面是具体的解决思路和代码:
步骤1:统一数据结构
首先需要把原始列表里的所有条目转换成统一的格式:每个条目都包含「三元组列表」和「标签数字」两个部分。对于只有数字的条目,我们把三元组列表设为空列表即可。
假设你的原始数据是这样的:
raw_list = [ [(('dwstweets gop', 'broadened', 'base people'), 1)], [(('bushs campaign video', 'features', 'kat'), 2)], [3], [4], [5], [(('president obama', 'wants', 'york'), 6)], [(('jeb bush', 'talked', 'enforcement'), ('lets', 'see', 'plan'), 7)] ]
预处理代码如下:
processed_items = [] for entry in raw_list: # 取出每个子列表里的核心内容 core_content = entry[0] if isinstance(core_content, int): # 处理只有数字的条目:三元组列表为空,标签就是这个数字 processed_items.append({ "triples": [], "label": core_content }) else: # 处理包含三元组和标签的条目:最后一个元素是标签,前面的都是三元组 label = core_content[-1] triples = core_content[:-1] # 可选:过滤掉不符合三元组格式的元素(确保每个元素是长度为3的元组) valid_triples = [t for t in triples if isinstance(t, tuple) and len(t) == 3] processed_items.append({ "triples": valid_triples, "label": label })
步骤2:转换为DataFrame
现在所有条目结构统一了,直接用pandas转换即可,不会再触发类型错误:
import pandas as pd df2 = pd.DataFrame(processed_items)
为什么这样能解决问题?
你的原始代码报错,是因为遍历到[3]、[4]这类条目时,代码可能尝试对3这个int类型执行len()或者迭代操作(比如拆分元素),而int并没有这些方法。通过预处理把所有条目都转换成包含triples和label的字典,pandas可以明确识别每个字段的类型,避免了对纯数字执行不兼容的操作。
内容的提问来源于stack exchange,提问作者C L
相关产品推荐
相关产品推荐

