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

pandas创建DataFrame报指定3列但数据列数不匹配问题排查

问题成因

pd.DataFrame() 构造函数接收可迭代对象作为输入数据时,默认将顶层可迭代对象的每个元素识别为一行数据,而非一列数据。
function()返回值是包含3个列表的元组,直接将这个元组传入构造函数时,pandas会判定输入为3行数据,且每行仅包含1个元素(即对应的完整列表),但columns参数传入了3个列名,要求每行有3个元素和列名一一对应,数据维度和列数不匹配,因此触发报错。
注:原示例代码中b、c的列表推导式直接引用了外层未定义的title变量,实际运行时需要替换为真实的摘要获取逻辑,否则会额外触发变量未定义错误。

修复方案

任选以下两种写法即可实现“每个列表单独作为一列”的需求:

  • 方案1:用zip()将三个列表按位置逐行打包,把打包后的逐行数据传入构造函数:
import pandas as pd

def function(pages = 0):
    a = [title for title in range(pages)]
    # 替换为真实的summary、summary2获取逻辑
    b = [[f"summary_{i}"] for i in range(pages)]
    c = [[f"summary2_{i}"] for i in range(pages)]
    return a, b, c

a, b, c = function(pages=2)
df = pd.DataFrame(zip(a, b, c), columns=['A', 'B', 'C'])
  • 方案2:以字典形式传入数据,字典的键为列名,值为对应列的列表,这种写法可读性更强,不需要手动对齐列顺序:
a, b, c = function(pages=2)
df = pd.DataFrame({
    'A': a,
    'B': b,
    'C': c
})

运行后得到的DataFrame结构如下,三个列表会分别对应A、B、C三列:

ABC
0['summary_0']['summary2_0']
1['summary_1']['summary2_1']

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 15:42:17