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

1500万行Pandas DataFrame高效处理:替换指定值与生成组合ID

处理1500万行Pandas DataFrame的高效方案

需求

处理包含1500万行的大型DataFrame:

  1. 将所有以College开头的college_name字段值替换为空值
  2. 创建combined id列,仅当学院名称有效时,将学生姓名与学院名称组合;学院无效时该列为空

原始数据

id1  id2            college_name     student    combined id 
0   01   01           Stanford          haley      id/haley_Stanford 
1   01   02           College12         josh       id/josh_College12
2   01   03           Harvard           jake       id/jake_Harvard
2   01   05           UPenn             emily      id/emily_UPenn
2   01   00           College10         sarah      id/sarah_College10

期望结果

id1  id2            college_name     student    combined id 
0   01   01           Stanford          haley      id/haley_Stanford 
1   01   02                             josh       
2   01   03           Harvard           jake       id/jake_Harvard
2   01   05           UPenn             emily      id/emily_UPenn
2   01   00                             sarah       

高效实现方案

直接用Pandas的矢量化字符串操作,完全避免循环,利用底层C扩展的优化,是处理大数据集最快的方式:

import pandas as pd
import numpy as np

# 1. 标记无效学院(以College开头)
invalid_college = df['college_name'].str.startswith('College', na=False)

# 2. 替换无效学院名称为空值
df.loc[invalid_college, 'college_name'] = ''

# 3. 生成combined id列:仅学院有效时组合,否则为空
df['combined id'] = np.where(
    ~invalid_college,
    'id/' + df['student'] + '_' + df['college_name'],
    ''
)

为什么这个方案最快?

  • 所有操作都是矢量化的,没有逐行循环,Pandas会把这些操作推送到底层C语言执行,比Python循环快几个数量级
  • str.startswith是Pandas专门优化的字符串方法,处理百万级数据效率远高于自定义循环
  • np.where和loc都是批量操作,避免了逐行判断的开销

额外优化建议

如果内存紧张,可以考虑:

  • 将college_name和student列设置为category类型(如果重复值较多),减少内存占用
  • 分块处理数据(用df.read_csv(chunksize=...)),避免一次性加载全部数据到内存

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 14:01:13