Pandas创建多层索引DataFrame报错:ValueError: all arrays must be same length
问题排查与修正
错误原因
你的代码存在两个核心问题:
- 随机数维度不匹配:
np.random.randint(0, high=9)仅生成单个整数,但你的DataFrame需要对应索引行数的2列数据,数据维度和索引、列数完全不匹配。 - 多层索引定义错误:
[[1, 2, 3], ['a', 'b']]是两个长度不一致的列表,Pandas无法直接解析为合法的多层索引,同时这也会导致索引行数和数据行数不匹配。
修正后的代码
如果你需要外层索引为1、2、3,每个外层索引对应内层索引a、b(共6行数据),可以这样写:
import pandas as pd import numpy as np # 生成6行2列的0-8随机整数 data = np.random.randint(0, 9, size=(6, 2)) # 生成笛卡尔积形式的多层索引 multi_index = pd.MultiIndex.from_product([[1, 2, 3], ['a', 'b']], names=['外层', '内层']) # 创建DataFrame df = pd.DataFrame(data, index=multi_index, columns=['A', 'B'])
关键说明
np.random.randint(0, 9, size=(6, 2)):明确指定生成6行2列的随机数,和索引行数、列数完全对应。pd.MultiIndex.from_product:生成两个层级的笛卡尔积索引,确保索引行数和数据行数一致。
如果你的需求是外层索引和内层索引一一配对(比如(1,a)、(2,b)、(3,c)),可以调整索引列表长度一致,同时匹配数据行数:
df = pd.DataFrame(np.random.randint(0, 9, size=(3, 2)), index=[[1,2,3], ['a','b','c']], columns=['A','B'])
内容的提问来源于stack exchange,提问作者kristinek
相关产品推荐
相关产品推荐

