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

如何用函数更新DataFrame子集?Python高效数据清洗方法求教

Pandas 数据清洗循环优化方案

原代码用iterrows()逐行遍历处理,会完全绕开Pandas的向量化优化,在数据量大时性能极差。下面是符合Pandas设计逻辑的高效实现方式:

import numpy as np
import pandas as pd

def multiply_values(self, variables: list, multiplier: int):
    # 统一处理tag_result列:将"-"转为NaN,同时把字符串型数值转成浮点型
    self.df['tag_result'] = pd.to_numeric(self.df['tag_result'], errors='coerce')
    
    # 生成筛选掩码:选出tpsw_id_core在目标列表中的行
    target_mask = self.df['tpsw_id_core'].isin(variables)
    
    # 向量化处理目标行的tag_result
    self.df.loc[target_mask, 'tag_result'] = np.where(
        self.df.loc[target_mask, 'tag_result'].isna(),
        0,
        self.df.loc[target_mask, 'tag_result'] * multiplier
    ).round().astype(int)

关键优化点:

  • 类型统一预处理:用pd.to_numeric一次性完成字符串转数值、异常值转NaN的操作,避免逐行判断"-"和空值的冗余逻辑。
  • 向量化筛选:用isin生成布尔掩码批量定位目标行,替代循环中的条件判断。
  • 向量化赋值:用np.where实现批量条件赋值,比逐行调用df.at效率提升几个数量级,数据量越大优势越明显。

如果之前尝试.loc或np.where失败,大概率是因为没有先将tag_result转为数值类型——原列中混合了字符串(如"-")和数值字符串,直接进行乘法运算会触发类型错误,预处理转成数值型是核心前提。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 08:07:08