ValueError: Must pass 2-d input Pandas DataFrame构建报错如何解决
代码问题分析
- 数组构造逻辑错误:三个列表直接相加是纵向拼接为长度150的一维数组,reshape为(50,3)后每一行的元素并不对应「原随机数、平方、平方根」的组合,数据完全错位。
- 构造DataFrame时多套了一层方括号:
[whole2[:,1:]]会将原本shape为(50,2)的二维数组包裹为shape为(1,50,2)的三维数组,不符合Pandas要求的二维输入规则,是触发报错的直接原因。 - 列参数和需求不匹配:你设定原随机数为行索引,不需要将
Number设为列字段,且传入的有效数据只有2列,但指定了3个列名,维度不匹配。 - 随机数范围错误:原代码
range(1, 100)是左闭右开规则,取不到100,不符合你要求的1-100取值范围。
正确修改方案
基于原有逻辑修正版本
import random import math import numpy as np import pandas as pd y = random.sample(range(1, 101), 50) # 修正取值范围到1-100 y1 = [f**2 for f in y] y2 = [round(math.sqrt(f)) for f in y] # 按列拼接三个列表,每行对应[原数, 平方, 平方根],避免数据错位 whole2 = np.column_stack([y, y1, y2]) # 去掉多余的外层方括号,列名匹配实际字段数量 df = pd.DataFrame(whole2[:,1:], index=whole2[:,0], columns=['Square','Square Root'])
更简洁的无Numpy版本
import random import math import pandas as pd y = random.sample(range(1, 101), 50) df = pd.DataFrame( data = [{'Square': f**2, 'Square Root': round(math.sqrt(f))} for f in y], index = y )
内容的提问来源于stack exchange,提问作者NewtonL
相关产品推荐
相关产品推荐

