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

不依赖Pandas的原生Python数据填充方案 替代df.iterrows()

原生Python替代Pandas iterrows的性能优化方案

iterrows性能差的核心原因是每次迭代都会生成Pandas Series对象,额外开销极高,全量数据场景下性能衰减非常明显。以下是完全不依赖Pandas的原生Python实现方案:

方案1:数据源为CSV文件场景

直接使用Python内置的csv模块读写数据,无需引入Pandas依赖:

import csv
from external_package import SearchEngine

# 提前实例化搜索对象,避免循环内重复初始化开销
search_engine = SearchEngine()

def fillin_func(input_csv_path, output_csv_path):
    # 读取源数据
    with open(input_csv_path, 'r', encoding='utf-8') as input_f:
        reader = csv.DictReader(input_f)
        field_list = reader.fieldnames
        processed_data = []
        for row in reader:
            # 可根据实际空值格式调整判断条件,csv读取的空值默认会是空字符串
            if not row['x'] or row['x'] is None:
                result = search_engine(row['z'])
                row['x'] = result.fillval
            processed_data.append(row)
    
    # 写入处理结果
    with open(output_csv_path, 'w', encoding='utf-8', newline='') as output_f:
        writer = csv.DictWriter(output_f, fieldnames=field_list)
        writer.writeheader()
        writer.writerows(processed_data)

方案2:数据源为内存列表结构场景

如果数据已经加载到内存,格式为列表嵌套字典([{'x': None, 'z': 'test1'}, ...]),直接遍历即可:

from external_package import SearchEngine
from functools import lru_cache

search_engine = SearchEngine()

# 可选优化:如果z列重复值多,添加缓存避免重复调用第三方接口
@lru_cache(maxsize=None)
def get_cached_fill_val(z):
    return search_engine(z).fillval

def fillin_func(source_data):
    for row in source_data:
        if row['x'] is None:
            row['x'] = get_cached_fill_val(row['z'])
    return source_data

性能说明

  • 原生Python遍历字典列表的速度比iterrows快10倍以上
  • 新增的lru_cache缓存逻辑在z列重复值占比高的场景下,可进一步将处理速度提升数倍到数十倍

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 03:09:04