Pandas中当前列值为空时取另一列值的高效实现方法
更高效的空值/空白替换方法
你当前用apply逐行处理的方式在数据量较大时效率很低,本质是Python层面的循环开销导致的。推荐用pandas的矢量化操作实现,速度能提升几个数量级,代码也更简洁:
方法1:使用mask(推荐)
mask会在满足条件时用指定值替换原数据,正好匹配你的需求——当column1是空/空白字符串时,用column2替换:
import pandas as pd # 先去除字符串两端空格,再判断是否为空,符合"空白"的定义 df['column1'] = df['column1'].mask(df['column1'].str.strip() == '', df['column2'])
方法2:使用where
where和mask逻辑相反,当条件不满足时保留原数据,满足时替换,写法如下:
df['column1'] = df['column2'].where(df['column1'].str.strip() == '', df['column1'])
方法3:同时处理NaN和空/空白
如果你的场景里还需要处理column1为NaN的情况,可以先把空/空白转成缺失值,再用fillna填充:
# 先去除空格,把空字符串转为pd.NA,再用column2填充所有缺失值 df['column1'] = df['column1'].str.strip().replace('', pd.NA).fillna(df['column2'])
为什么这些方法更高效?
pandas的矢量化操作是基于C语言实现的,避免了逐行遍历的Python循环开销,当DataFrame行数超过万级时,性能差距会非常明显。
内容的提问来源于stack exchange,提问作者Mike Mann
相关产品推荐
相关产品推荐

