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

从DataFrame嵌套列表列提取传感器读数的高效方法求助

高效提取DataFrame嵌套列表中的传感器读数(去除时间戳)

问题背景

已将.mat文件加载至pandas DataFrame,其中sensor列存储为嵌套列表,每个子列表包含[时间戳, 传感器读数]结构。需要提取所有传感器读数组成新列表(去除时间戳),但原嵌套for循环处理630行(每行约3万条数据)耗时约10分钟,急需更高效的处理方案。

原示例代码

df = pd.DataFrame({'id':['1A', '2A', '3A'],
                   'sensor': [[[0,10], [2,15], [4,20]], [[0,7], [2,14], [4,18]], [[0,11], [2,16], [4,22]]]})

sensor_data_without_timestamp = []
for i in range(len(df)):
    l = []
    for a in range(len(df['sensor'][i])):
        l.append(df['sensor'][i][a][1])
    sensor_data_without_timestamp.append(l)

df['sensor_data_without_timestamp'] = sensor_data_without_timestamp
df.head()

高效解决方案

方案1:使用apply+列表推导(最快最简洁)

利用pandas的apply方法结合Python列表推导,替代纯Python嵌套循环,充分利用pandas的内部优化:

df['sensor_data_without_timestamp'] = df['sensor'].apply(lambda x: [item[1] for item in x])

列表推导本身是Python中效率极高的迭代方式,配合apply的向量化处理逻辑,能将原10分钟的耗时压缩至几十秒甚至更短。

方案2:用swifter进一步加速(超大数据集适用)

如果数据量极端庞大,可借助swifter库自动选择最优执行方式(自动切换普通apply或Dask分布式处理):

  1. 先安装库:
pip install swifter
  1. 执行代码:
import swifter

df['sensor_data_without_timestamp'] = df['sensor'].swifter.apply(lambda x: [item[1] for item in x])

效率差异说明

原嵌套for循环完全在纯Python层面迭代,没有利用pandas的向量化优化,处理大量数据时会产生极高的时间开销。而上述方案通过将迭代逻辑融入pandas的优化框架,大幅减少了Python解释器的循环开销,效率提升显著。

内容的提问来源于stack exchange,提问作者M.Zayed

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 23:09:32