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

如何将DataFrame中各列表类型元素替换为对应列表的第二个元素

实现方案

针对全为列表元素的DataFrame,无显式Python层循环的高性能实现方式如下,核心借助numpy向量化操作,所有运算在C层完成,性能远高于逐元素apply写法:

import pandas as pd
import numpy as np

# 构造测试数据
df = pd.DataFrame({'a':[[1,7],[0,5]],'b':[[3,1],[4,0]],'c':[[1,4],[2,0]]})

# 提取每个列表第二个元素(索引为1)
result = pd.DataFrame(
    np.array(df.to_numpy().tolist())[:, :, 1],
    columns=df.columns
)

实现逻辑说明

  • 首先通过df.to_numpy().tolist()将原DataFrame转换为二维嵌套列表,结构为[行][列] = 原单元格列表
  • 嵌套列表传入np.array()后会生成形状为(行数, 列数, 单列表长度)的三维numpy数组
  • 索引[:, :, 1]表示选取所有行、所有列下,每个列表索引为1的元素(Python索引从0开始,对应第二个元素)
  • 最后将提取到的二维数组重新封装为DataFrame,保留原列名即可

结果验证

运行代码后输出的result完全符合预期:

a  b  c
0  7  1  4
1  5  0  0

常见误区说明

  • replace方法仅支持值匹配替换,无法直接提取列表内部元素,不适用该场景
  • 基于apply/applymap + lambda的写法本质是Python层逐元素循环,数据量较大时运行耗时高,不符合性能要求
  • 该方法要求所有单元格内的列表长度至少为2,否则会触发索引越界错误,使用前建议先做数据合法性校验

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 06:06:54