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

如何在Pandas中避免用iterrows()实现字符串拼接与独热编码?

高效实现字符串列拼接与独热编码(替代iterrows()的向量化方案)

一、优化后的向量化实现代码

你可以直接利用pandas的向量化字符串操作完成拼接,再进行独热编码,完全不需要iterrows()循环:

import pandas as pd

# 模拟数据集
data = {
       'ColA': ['Apple', 'Banana', 'Apple', 'Orange'],
       'ColB': ['Red', 'Yellow', 'Green', 'Orange']
}
df = pd.DataFrame(data)

# 向量化拼接字符串列(比iterrows快几个数量级)
df['Combined'] = df['ColA'] + '_' + df['ColB']

# 生成独热编码
one_hot = pd.get_dummies(df['Combined'])

# 可选:将独热编码合并回原DataFrame
df = pd.concat([df, one_hot], axis=1)

print(df)

如果你的数据集特别大,还可以使用sklearn的OneHotEncoder,它在处理超大规模数据时内存效率更高:

from sklearn.preprocessing import OneHotEncoder
import pandas as pd

data = {
       'ColA': ['Apple', 'Banana', 'Apple', 'Orange'],
       'ColB': ['Red', 'Yellow', 'Green', 'Orange']
}
df = pd.DataFrame(data)

df['Combined'] = df['ColA'] + '_' + df['ColB']

# 初始化编码器并拟合转换
encoder = OneHotEncoder(sparse_output=False)
one_hot = encoder.fit_transform(df[['Combined']])

# 转换为DataFrame并合并
one_hot_df = pd.DataFrame(one_hot, columns=encoder.get_feature_names_out(['Combined']))
df = pd.concat([df, one_hot_df], axis=1)

print(df)

二、性能差异的核心原因

  • iterrows()的低效本质:
    iterrows()是逐行遍历DataFrame,每一次迭代都会把行数据转换成Python对象(Series),这会产生大量的Python层面循环开销和对象创建成本。在大型数据集上,这种逐行操作的额外损耗会被无限放大,处理速度极慢。

  • 向量化操作的高效逻辑:
    pandas的向量化字符串操作(比如df['ColA'] + '_' + df['ColB'])基于底层C语言实现,会把整个列作为整体批量处理,完全避开了Python循环的开销。这种操作的执行效率远高于逐行遍历,在十万甚至百万级数据集上,速度能提升几十到上百倍。

  • 独热编码的优化补充:
    pd.get_dummies本身是向量化实现,但sklearn.OneHotEncoder支持稀疏矩阵输出(设置sparse_output=True),在类别数量多、数据稀疏的场景下,能大幅降低内存占用,进一步提升大型数据集的处理效率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.04 12:13:10