如何以Pythonic方式将Pandas的k/p列重构为指定结构的NumPy数组
问题描述
我有一个包含大量k1, p1, k2, p2,...,kn, pn格式列的长DataFrame,示例如下:
k1 p1 k2 p2 k3 p3 ... -0.001870 0.000659 -0.005000 0.000795 -0.003889 0.000795 ... -0.002778 0.000556 0.000795 0.001667 0.000795 0.002778 ...
请问如何以最Pythonic的方式构建一个NumPy数组,将所有k列和p列分别归为子数组,形成类似[[[-0.001870,-0.005000,-0.003889,...],[0.000659,0.000795,0.000795...]],[[-0.002778, 0.000795, 0.000795...],[0.000556, 0.001667, 0.002778...]], ...[[...],[...]]]的结构?
解决方案
推荐两种Pythonic实现方式,均采用向量式操作避免循环,兼顾灵活性与效率:
方法一:按列名筛选(灵活通用)
适合列名包含k/p但顺序不确定的场景:
import pandas as pd import numpy as np # 假设你的DataFrame名为df # 筛选所有k列、p列并转成NumPy数组 k_arr = df.filter(like='k').to_numpy() p_arr = df.filter(like='p').to_numpy() # 在第二个维度堆叠数组,得到目标结构 result = np.stack([k_arr, p_arr], axis=1)
说明
df.filter(like='k')自动匹配所有列名含k的列,无需手动罗列列名,适配大量列的场景np.stack(..., axis=1)将两个形状为(行数, n)的数组,堆叠为(行数, 2, n)的结构,正好对应每行的[k子数组, p子数组]
方法二:数组切片(高效直接)
适合列严格遵循k1,p1,k2,p2...顺序的场景,直接操作底层数组效率更高:
import numpy as np # 先将DataFrame转为NumPy数组 arr = df.to_numpy() # 按步长切片分离k、p列 k_arr = arr[:, ::2] # 取索引0、2、4...的列(所有k列) p_arr = arr[:, 1::2] # 取索引1、3、5...的列(所有p列) # 堆叠得到目标结构 result = np.stack([k_arr, p_arr], axis=1)
内容的提问来源于Stack Exchange,提问作者Ernesto Lopez Fune
相关产品推荐
相关产品推荐

