将嵌套列表转为Pandas DataFrame行并新增列时遇长度匹配错误
解决Pandas赋值嵌套列表到新列的长度不匹配问题
嘿,我明白你遇到的麻烦了——直接把嵌套列表pred赋值给DataFrame的新列时,Pandas把整个子列表当成了单个单元格的值,导致长度不匹配报错。别担心,咱们一步一步解决它:
问题根源
你的嵌套列表pred是按组存储预测结果的(比如每个子列表对应sent列的一个分组),但DataFrame的行数是所有分组的行总和。直接赋值时,Pandas会认为你要给每行塞一个子列表,可pred的长度是子列表的数量(比如2个),远小于DataFrame的总行数(比如6行),自然就抛出ValueError了。
解决方案:先展开嵌套列表
我们需要把嵌套列表扁平化成一维列表,让每个元素对应DataFrame的一行。用Python的列表推导式就能轻松实现:
示例代码
import pandas as pd # 模拟你的原始DataFrame df = pd.DataFrame({ 'sent': [0, 0, 0, 1, 1, 1], 'token': ['a', 'b', 'b', 'a', 'b', 'c'] }) # 你的预测嵌套列表 pred = [['b', 'c', 'd'], ['b', 'a', 'u']] # 扁平化嵌套列表 flattened_pred = [item for sublist in pred for item in sublist] # 赋值到新列 df['pred'] = flattened_pred # 查看结果 print(df)
运行结果
sent token pred 0 0 a b 1 0 b c 2 0 b d 3 1 a b 4 1 b a 5 1 c u
关键注意事项
一定要确保嵌套列表所有子列表的长度之和等于DataFrame的总行数,否则还是会出现长度不匹配的错误。如果不一致,你需要检查预测算法的输出是否和DataFrame的行分组对应(比如每个sent分组的行数是否和pred中对应子列表的长度一致)。
内容的提问来源于stack exchange,提问作者Mi.
相关产品推荐
相关产品推荐

