如何提取DataFrame所有行列值并转换为二维Numpy数组
多标签分类DataFrame转二维Numpy数组解决方案
问题核心
你的需求是把多标签分类DataFrame里的所有行列数据转成二维Numpy数组,但之前按列迭代追加的代码把数组弄成一维了——这是因为直接逐个追加元素会把结构扁平化。
两种正确实现方式
方法1:用Pandas原生方法(最省事)
DataFrame自带to_numpy()方法,直接一步转成二维数组,完全不用手动迭代:
import pandas as pd import numpy as np # 示例多标签DataFrame df = pd.DataFrame({ '标签A': [0, 1, 0], '标签B': [1, 0, 1], '标签C': [1, 1, 0] }) # 直接转换为二维Numpy数组 result = df.to_numpy() print(result) print(f"数组维度: {result.ndim}")
输出结果:
[[0 1 1] [1 0 1] [0 1 0]] 数组维度: 2
方法2:手动按行迭代(如果非要自己写循环)
要是你想手动实现,别按列遍历,按行来,每一行作为一个子列表加入结果:
result_list = [] for _, row in df.iterrows(): result_list.append(row.tolist()) # 转成Numpy数组 result = np.array(result_list) print(result)
为啥原代码得到一维数组?
大概率你是这么写的:
# 错误示例:按列迭代+extend会扁平化所有元素 wrong_result = [] for col in df.columns: wrong_result.extend(df[col].tolist()) wrong_result = np.array(wrong_result) print(wrong_result) # 输出一维数组:[0 1 0 1 0 1 1 1 0]
这种写法会把每一列的元素挨个塞进列表,直接把二维结构压成一维,自然不符合要求。
目标输出匹配
如果你的目标输出是类似下面的二维数组:
array([[0, 1, 1], [1, 0, 1], [0, 1, 0]])
上面两种正确方法都能完美生成这个格式。
内容的提问来源于stack exchange,提问作者Ralph Henry
相关产品推荐
相关产品推荐

