将二维ndarray存入DataFrame单列仅保留第0列的原因咨询
问题描述
执行以下代码:
import pandas as pd df=pd.read_csv("") df.head()
(数据集包含Gender、Height、Weight三列)
接着执行编码相关代码:
a=enc.fit_transform(df) print(a) print(type(a)) print(a.shape) df["Gender"]=a
执行后发现:编码工具enc对df中全部三列完成编码,生成了形状为(10000,3)的二维ndarray,但将该数组赋值给df的"Gender"列时,仅数组的第0列值被存入,第1、2列的数值完全丢失。疑惑为何无法将10000×3的内容存入该列。
原因分析
Pandas的DataFrame单列仅支持存储一维数据,而你生成的a是二维数组(10000行×3列)。当直接把二维数组赋值给单个列时:
- Pandas会尝试做维度匹配,由于单列只能容纳一维数据,它会自动提取二维数组的**第一列(索引为0的列)**来填充目标列,因为这部分的维度(10000×1)和列的要求匹配。
- 剩下的两列因无法适配单列的一维结构,直接被丢弃,不会存入DataFrame中。
解决建议
如果要保留所有编码后的3列数据,有两种常规做法:
- 将编码后的二维数组转为新的DataFrame,和原数据合并:
encoded_cols = pd.DataFrame(a, columns=["Encoded_Gender", "Encoded_Height", "Encoded_Weight"]) df = pd.concat([df, encoded_cols], axis=1)
- 直接用编码后的数据替换原有的三列(若无需保留原始数据):
df[["Gender", "Height", "Weight"]] = a
内容的提问来源于stack exchange,提问作者mandu
相关产品推荐
相关产品推荐

