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

如何使用等长行列表与列列表构建Pandas DataFrame?

用行列表与列列表构建Pandas DataFrame的正确方法

当你有长度相等的行数据列表row_list和列名列表col_list,需要构建列名为col_list、行数据为row_list的DataFrame时,直接传入列名会触发形状不匹配错误,转置后列名又不符合预期,以下是几种可行的解决方法:

错误示例

import pandas as pd

row_list = ['a', 'b', 'c', 'd']
col_list = ['A', 'B', 'C', 'D']

# 直接传入列名触发报错
df = pd.DataFrame(row_list, columns=col_list)
>>> ValueError: Shape of passed values is (4, 1), indices imply (4, 4)

# 转置后列名不符合预期
df = pd.DataFrame(row_list).T
>>> 
   0  1  2  3
0  a  b  c  d

正确方法

方法1:将行列表包装为二维列表

Pandas构造DataFrame时,二维列表中的每个子列表会被识别为一行数据,直接传入列名即可:

df = pd.DataFrame([row_list], columns=col_list)
print(df)

输出:

A  B  C  D
0  a  b  c  d

方法2:通过字典映射构造

将列名与行数据一一对应成字典,再包装为列表传入DataFrame:

data_dict = dict(zip(col_list, row_list))
df = pd.DataFrame([data_dict])
print(df)

输出结果与方法1一致。

方法3:循环场景下的批量构建

如果是在循环中不断生成行数据和列名(确保每次列名与行数据长度一致),可以先收集所有行数据,最后统一构造DataFrame:

all_rows = []
col_list = ['A', 'B', 'C', 'D']

# 模拟循环生成行数据
for i in range(3):
    row_list = [chr(ord('a')+i), chr(ord('b')+i), chr(ord('c')+i), chr(ord('d')+i)]
    all_rows.append(row_list)

df = pd.DataFrame(all_rows, columns=col_list)
print(df)

输出:

A  B  C  D
0  a  b  c  d
1  b  c  d  e
2  c  d  e  f

错误原因说明

  • 直接传入row_list时,Pandas会将列表中每个元素视为单独一行,因此数据形状为(4,1),但col_list有4个列名,要求数据形状为(4,4),因此触发形状不匹配错误。
  • 转置pd.DataFrame(row_list).T后,原列表的索引(0、1、2、3)会成为列名,无法得到预期的col_list作为列名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 14:02:28