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

如何高效将Pandas读取的CSV数据转换为Gaze对象列表?

高效将CSV数据转换为Gaze对象的方案

核心思路

避免逐行循环解析(如iterrows或csv.DictReader),改用Pandas批量提取数据+Numpy数组存储+列表推导/生成器的组合,利用Numpy的C级运算效率大幅提升处理速度。

实现代码

import pandas as pd
import numpy as np

class Gaze:
    def __init__(self, ts, frame_idx, gaze2D, gaze_dir3D=None):
        self.ts = ts
        self.frame_idx = frame_idx
        self.gaze2D = gaze2D
        self.gaze_dir3D = gaze_dir3D

# 1. 读取CSV数据
df = pd.read_csv("your_gaze_data.csv")

# 2. 批量提取所需列并转为Numpy数组(一次性完成,避免逐行读取)
ts_arr = df["timestamp"].to_numpy()
frame_idx_arr = df["frame_idx"].to_numpy()
gaze2D_arr = df[["gaze_pos_x", "gaze_pos_y"]].to_numpy()
gaze_dir3D_arr = df[["gaze_dir_x", "gaze_dir_y", "gaze_dir_z"]].to_numpy()

# 3. 用列表推导式快速生成Gaze对象列表
gaze_objects = [
    Gaze(ts_arr[i], frame_idx_arr[i], gaze2D_arr[i], gaze_dir3D_arr[i])
    for i in range(len(df))
]

内存优化方案(超大数据量场景)

如果CSV数据量极大,一次性生成所有Gaze对象会占用过多内存,可改用生成器表达式按需生成对象:

def generate_gaze_objects(df):
    ts_arr = df["timestamp"].to_numpy()
    frame_idx_arr = df["frame_idx"].to_numpy()
    gaze2D_arr = df[["gaze_pos_x", "gaze_pos_y"]].to_numpy()
    gaze_dir3D_arr = df[["gaze_dir_x", "gaze_dir_y", "gaze_dir_z"]].to_numpy()
    
    for i in range(len(df)):
        yield Gaze(ts_arr[i], frame_idx_arr[i], gaze2D_arr[i], gaze_dir3D_arr[i])

# 按需迭代处理,无需一次性加载所有对象
for gaze_obj in generate_gaze_objects(df):
    # 执行单个对象的处理逻辑
    pass

性能提升原因

  1. 批量数据提取:Pandas读取CSV后直接转为Numpy数组,避免了iterrows逐行生成Series的额外开销;
  2. Numpy数组访问:Numpy数组的元素访问是C级实现,远快于Python原生字典/Series的访问速度;
  3. 列表推导效率:列表推导的循环效率比for...in iterrows()或csv.DictReader的纯Python循环高数倍。

内容的提问来源于stack exchange,提问作者Diederick C. Niehorster

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 14:26:02