如何使用等长行列表与列列表构建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
相关产品推荐
相关产品推荐

