如何通过向量化方式为DataFrame创建基于其他列的拼接新列?
如何用向量化方式创建基于其他列的新列?
一、通用思路:向量化操作的核心逻辑
咱们在Pandas里创建基于其他列的新列时,一定要优先用向量化方法,而不是逐行迭代。原因很简单:向量化操作是在Pandas底层用优化过的C代码执行的,比Python层面的循环快太多了,数据量越大,差距越明显。
常见的向量化实现思路有这些:
- 直接对列进行原生运算:比如算术运算、字符串拼接这类简单操作,直接对Series(列)做操作就行
- 用向量化条件函数:比如
np.where()处理多分支逻辑,pd.cut()做分箱操作,都是批量处理,不用逐行判断 - 复杂场景下可以用
pd.Series.transform()或者pd.DataFrame.apply()(不过apply尽量少用,只有当原生方法搞不定的时候再考虑)
二、具体场景:拼接STREET和NR列生成ADDRESS
你提到的逐行循环方法虽然能实现需求,但效率真的不高——iterrows()会把每一行转成Series,遍历起来非常慢。这里给你几个高效的向量化实现方案:
方案1:直接用字符串加法拼接
这是最直观的方式,注意要把数值类型的NR列转成字符串,不然会报错:
df['ADDRESS'] = df['STREET'] + ' ' + df['NR'].astype(str)
方案2:用str.cat()方法更灵活
Pandas的字符串方法str.cat()专门用来拼接字符串列,还能方便处理缺失值:
# 基础拼接 df['ADDRESS'] = df['STREET'].str.cat(df['NR'].astype(str), sep=' ') # 如果有缺失值,可以指定替换值 df['ADDRESS'] = df['STREET'].str.cat(df['NR'].astype(str), sep=' ', na_rep='Unknown')
方案3:用apply(仅作参考,优先用前两种)
如果是更复杂的拼接逻辑,偶尔可以用apply,但它的效率不如原生向量化方法:
df['ADDRESS'] = df.apply(lambda row: f"{row['STREET']} {row['NR']}", axis=1)
效率对比
举个例子,当你的DataFrame有10万行时,向量化操作的速度大概是iterrows()循环的50-100倍,数据量越大,这个差距会越夸张,所以平时写代码一定要尽量避开逐行迭代~
内容的提问来源于stack exchange,提问作者Thijmen
相关产品推荐
相关产品推荐

