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

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列的输出如下:

BRANDCONCAT_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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 12:24:06