You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将DataFrame指定列的每行转为单个numpy数组?

嘿,我明白你的需求了——你不想得到一个大的二维numpy数组,而是要把每一行的sepal_length和sepal_width拆成单独的点(比如point1=[5.1,3.5]这种形式)对吧?这里有几个实用的方法,你可以根据自己的场景选择:

几种可行的解决方案

方法1:用apply逐行生成列表(直观易懂)

这是最直接的写法,对选中的两列逐行处理,把每行转成列表:

import pandas as pd

# 假设你的DataFrame名为df
points = df[['sepal_length', 'sepal_width']].apply(lambda row: row.tolist(), axis=1).tolist()

执行后points就是一个嵌套列表,每个元素对应一行的两个值,比如[[5.1, 3.5], [4.9, 3], ...]。你可以通过索引直接取单个点,比如points[0]就是第一个数据点。

方法2:基于numpy数组拆分(高效简洁)

如果你已经用to_numpy()得到了二维数组,也可以直接遍历这个数组,把每一行单独拿出来:

import numpy as np

# 先转成二维numpy数组
arr = df[['sepal_length', 'sepal_width']].to_numpy()
# 遍历拆分出每个行作为单个点
points = [row for row in arr]

这里每个points[i]是一个一维numpy数组(比如array([5.1, 3.5])),如果需要转成普通列表,改成[row.tolist() for row in arr]就行。这种方法比apply效率更高,数据量大的时候优势明显。

方法3:用itertuples(性能最优)

如果你的数据集很大,追求极致性能的话,推荐用itertuples——它比iterrows快得多,是pandas里遍历行的高效方式:

# 用列表推导式简化写法
points = [[row.sepal_length, row.sepal_width] 
          for row in df[['sepal_length', 'sepal_width']].itertuples(index=False)]

这里index=False表示不返回原DataFrame的索引,只取我们需要的两个字段值。

小补充

  • 如果你需要保留原DataFrame的索引和对应关系,可以不用加.tolist()(比如方法1里只到apply(...)),这样得到的是一个Series,每个索引对应一个点的列表。
  • 如果需要的是numpy数组类型的单个点,方法2的写法直接就能满足,不需要额外转换。

内容的提问来源于stack exchange,提问作者user14416085

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 19:22:27