基于索引高效映射大型Pandas DataFrame的方法
超大规模DataFrame的快速映射优化方案
针对你5000万+行的DataFrame,核心优化思路是彻底避开Python层面的循环/哈希查找,用numpy底层的向量化操作实现映射——因为你的Numbers列取值范围固定为1-100,完全不需要用字典、apply、map这类效率低下的方式。
方案1:直接向量化字符串拼接
这是最简洁的实现,利用pandas的向量化字符串操作,底层基于numpy,完全没有Python循环:
df['Numbers_with_a'] = 'a' + df['Numbers'].astype(str)
方案2:预生成映射数组后快速索引
如果追求极致性能,可以提前生成包含所有映射结果的numpy数组,然后通过数组索引直接取值(numpy的索引操作是C级别的,效率极高):
import numpy as np # 预生成1到100对应的映射值,索引和Numbers的数值一一对应 mapping_arr = np.array([f'a{i}' for i in range(101)]) # 索引0对应'a0',实际不会用到 df['Numbers_with_a'] = mapping_arr[df['Numbers'].values]
为什么原来的方法慢?
apply本质是逐行执行Python函数,5000万次Python函数调用的开销极大;map和replace基于字典哈希查找,虽然比apply快,但依然需要对每条数据做哈希匹配,远不如向量化操作高效;- 上述两种方案都是直接在numpy数组上做批量操作,完全跳过Python层面的循环,性能能提升几十甚至上百倍。
内容的提问来源于stack exchange,提问作者wojteka
相关产品推荐
相关产品推荐

