Pandas批量循环列:用同名后缀列替换缺失值方法问询
批量用后缀列替换原列NaN值的Python实现
当然可以搞定这个需求!对于你这种需要循环处理多列,用对应_suffix列的值填补原列NaN的场景,用Pandas来实现非常顺手,我给你整理了两种实用的方法,新手也能轻松上手:
1. 先准备示例数据
首先我们先把你给出的示例数据用Pandas构造出来,方便后续测试:
import pandas as pd import numpy as np # 构造示例DataFrame df = pd.DataFrame({ 'obs': [1, 2], 'col1': [np.nan, 200], 'col2': [50, np.nan], 'col1_suffix': [20, 30], 'col2_suffix': [60, 100] })
运行后得到的df就是你给出的表格结构啦。
2. 方法一:手动指定列名循环处理
如果你的原列数量不多,或者已经明确知道要处理的列名(比如col1、col2),可以直接循环这些列名,用combine_first方法完成替换:
# 定义需要处理的原列列表 original_cols = ['col1', 'col2'] for col in original_cols: # 拼接对应的后缀列名 suffix_col = f"{col}_suffix" # 用后缀列的值替换原列的NaN df[col] = df[col].combine_first(df[suffix_col])
执行完这段代码后,你再查看df就会发现:
col1的NaN被col1_suffix的20替换了col2的NaN被col2_suffix的100替换了
3. 方法二:自动匹配后缀列(适合大量列的场景)
如果你有很多列(比如col1到colN),不想手动列出来,可以通过列名的规律自动匹配原列和后缀列:
# 提取所有原列(排除带_suffix的列和obs列) original_cols = [col for col in df.columns if not col.endswith('_suffix') and col != 'obs'] for col in original_cols: suffix_col = f"{col}_suffix" # 先确认后缀列存在,避免报错 if suffix_col in df.columns: df[col] = df[col].combine_first(df[suffix_col])
这种方法会自动识别所有不带_suffix的列(除了obs),然后去找对应的后缀列进行替换,非常适合列数多的情况,不用一个个手动写列名。
小补充:关于combine_first
combine_first的作用是:用右侧列的值填充左侧列中的缺失值,而且只会替换NaN,不会改动原列中已有的有效值,完全符合你的需求。你也可以用df[col].fillna(df[suffix_col]),效果是一样的,两种方法选你觉得顺手的就行~
内容的提问来源于stack exchange,提问作者wingman168
相关产品推荐
相关产品推荐

