使用Pandas DataFrame标记列名时出现维度不匹配错误
解决pd.DataFrame创建时维度不匹配的问题
问题场景
我有一个形状为(31,1)的数组数据:
array([-4.92986060e-01, -3.26816435e-01, -2.81509125e-02, -5.50369198e-02, -4.78291735e-01, -3.77629735e-01, 2.56439110e-01, -7.80681558e-02, 1.16469866e-01, 3.85537902e-02, 1.45576290e-02, 1.30638731e-01, -1.38000533e-01, 1.59521248e-02, -5.90236009e+00, -1.93493371e+00, 9.29390668e-02, 1.58132616e-01, -2.37706974e-01, 4.10766116e-01, -1.99106536e-02, 2.91439759e-03, -1.34659982e+00, -8.83233098e-02, -1.19043573e-01, -1.98791078e-02, 2.18003752e-03, 7.97191732e-03, 5.01870085e-02, 8.15185865e-02, 3.56969073e-02])
尝试用pd.DataFrame为数据添加列名,代码如下:
df = pd.DataFrame(df, columns=[feature_names])
运行时抛出维度不匹配错误:
ValueError: Shape of passed values is (31, 1), indices imply (31, 31)
问题原因
报错核心是columns参数的传参错误:feature_names是长度为31的列表,你又用外层方括号包裹成二维列表,Pandas会将其识别为31个列名,但你的数组仅包含1列,导致维度不匹配。
解决方案
根据实际需求分两种情况处理:
情况1:为单列数据设置一个列名
如果feature_names是单个字符串(如"single_feature"),直接去掉外层方括号:
df = pd.DataFrame(df, columns=feature_names)
若feature_names是长度为1的列表(如["single_feature"]),直接传入即可:
df = pd.DataFrame(df, columns=feature_names)
情况2:将数组元素对应到31个列(转置数据)
如果需要让数组的31个值分别对应31个列的单一行数据,需先将数组重塑为(1,31)的形状:
# 方法1:使用转置 df = pd.DataFrame(df.T, columns=feature_names) # 方法2:重塑数组形状 df = pd.DataFrame(df.reshape(1, -1), columns=feature_names)
内容的提问来源于stack exchange,提问作者Vui Chee Chang
相关产品推荐
相关产品推荐

