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

如何将Pandas DataFrame的列拼接为一维数组?

实现DataFrame列的一维拼接(全列/部分列)

一、拼接全部列成一维数组

给你两种简洁高效的方法,不用手动列列名:

  • 方法1:numpy按列展平
    把DataFrame转成numpy数组后,用ravel('F')按列优先顺序展平('F'对应Fortran顺序,即先取完第一列所有元素,再取第二列,以此类推):
import pandas as pd
import numpy as np

# 示例DataFrame
df = pd.DataFrame({'set1': [3,4], 'set2': [5,8], 'set3': [6,0], 'set175': [9,22]})

# 全列拼接为一维数组
full_concat = df.to_numpy().ravel('F')
# 输出结果:array([ 3,  4,  5,  8,  6,  0,  9, 22])

老版本里用df.values.ravel('F')也能得到同样结果。

  • 方法2:pandas stack方法
    stack()会将列索引转为内层行索引,生成一个Series,直接取values就能得到一维数组:
full_concat = df.stack().values

结果和上面完全一致,这种方法不需要额外依赖numpy。

二、拼接指定范围的列(比如第1-3列)

先筛选出目标列,再复用上面的方法即可:

  • 按列位置筛选:pandas列位置从0开始,第1到3列对应索引0:3(左闭右开):
# 筛选第1-3列(对应示例中的set1、set2、set3)
partial_df = df.iloc[:, 0:3]
# 拼接为一维数组
partial_concat = partial_df.to_numpy().ravel('F')
# 输出结果:array([3,4,5,8,6,0])
  • 按列名范围筛选:如果列名是连续命名的(比如set1到set3),可以直接用列名切片:
partial_df = df.loc[:, 'set1':'set3']
partial_concat = partial_df.stack().values

三、是否需要转numpy数组?

两种思路都可行:

  • 转numpy的方法(to_numpy().ravel('F'))效率更高,适合数百列的大数据集;
  • 纯pandas方法(stack().values)更直观,不需要引入numpy,最终结果同样是numpy数组(Series的values属性本身就是numpy数组)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 08:05:25