Pandas DataFrame处理数据时如何跳过NaN值合并多列ID字段
实现代码
你可以通过pandas的行遍历+字符串处理实现需求,完整代码如下:
import pandas as pd import numpy as np import re # 你的原始DataFrame dfx = pd.DataFrame({ 'BRAND': ['A', 'B', 'C', 'D'], 'STATUT':['Trading', 'Trading', 'Trading', 'Trading'], 'ID_1': [str(144), str(205), str(123), np.NaN], 'ID_2': [str(173), np.NaN, '0123', str(124)], 'ID_3': ['0897', np.NaN, np.NaN,np.NaN], }) # 行处理函数:拼接有效ID def concat_valid_ids(row): # 过滤当前行三个ID列的空值 valid_id_list = row[['ID_1', 'ID_2', 'ID_3']].dropna().tolist() # 每个ID仅保留数字、包裹单引号 processed_ids = [f"'{re.sub(r'\\D', '', id_val)}'" for id_val in valid_id_list] # 逗号拼接后返回 return ','.join(processed_ids) # 新增拼接结果列 dfx['CONCAT_IDS'] = dfx.apply(concat_valid_ids, axis=1)
结果说明
运行后CONCAT_IDS列的输出如下:
| BRAND | CONCAT_IDS |
|---|---|
| A | '144','173','0897' |
| B | '205' |
| C | '123','0123' |
| D | '124' |
简化方案
如果你确定所有ID列的有效值本身就只包含数字,不需要额外过滤非数字字符,可以省略re依赖,用更简洁的写法:
dfx['CONCAT_IDS'] = dfx[['ID_1','ID_2','ID_3']].apply( lambda x: ','.join([f"'{i}'" for i in x.dropna()]), axis=1 )
如果需要处理三列全为空的场景,可以在处理函数中加入判断逻辑,自定义空行的返回值。
内容的提问来源于stack exchange,提问作者carmen
相关产品推荐
相关产品推荐

