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

如何优雅地将Pandas DataFrame指定列转为嵌套浮点数组?

问题描述

现有如下示例DataFrame:

col1  col2  col3 
1     1     2     3    
2     4     5     6  
3     7     8     9    
4     10    11    12     

需要新增一列new,该列元素为嵌套数组格式[[值1,值2]],其中值来自指定列(如col2、col3)的浮点型数值,最终输出如下:

col1  col2  col3        new
1     1     2     3    [[2,3]]
2     4     5     6    [[5,6]]
3     7     8     9    [[8,9]]
4     10    11    12   [[11,12]]

当前已有可行但繁琐的实现代码:

selected_columns = ["col2", "col3"]
df[selected_columns] = df[selected_columns].astype(float)
df['new'] = df.apply(lambda r: tuple(r[selected_columns]), axis=1) 
              .apply(np.array) 
              .apply(lambda r: tuple(r[["new"]]), axis=1) 
              .apply(np.array)

作为Pandas和NumPy新手,希望找到更简洁高效的实现方法。

更优实现方法

方法一:利用NumPy向量化操作构造嵌套数组

这种方法避免多次调用apply,效率最高,适合大数据集:

import numpy as np
import pandas as pd

selected_columns = ["col2", "col3"]
# 转换指定列为浮点型
df[selected_columns] = df[selected_columns].astype(float)
# 提取数值并reshape成嵌套结构,转成列表赋值
df['new'] = list(np.array(df[selected_columns]).reshape(-1, 1, 2))

解释:np.array(df[selected_columns])生成形状为(4,2)的数组,reshape(-1,1,2)将其转换为(4,1,2)的三维数组,转成列表后正好匹配[[值1,值2]]的格式。

方法二:单次apply直接构造嵌套列表

如果习惯用apply,可以简化为一次调用:

selected_columns = ["col2", "col3"]
df[selected_columns] = df[selected_columns].astype(float)
df['new'] = df[selected_columns].apply(lambda x: [[x.col2, x.col3]], axis=1)

解释:直接在apply逻辑里构造嵌套列表,一步完成转换,比多次链式调用简洁很多。

方法三:Python列表推导式

用纯列表推导实现,可读性强:

selected_columns = ["col2", "col3"]
df[selected_columns] = df[selected_columns].astype(float)
df['new'] = [[[row.col2, row.col3]] for _, row in df.iterrows()]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 02:45:17