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

如何在Python Pandas中替换DataFrame列中含逗号的指定值?

Pandas 数据清洗需求实现方案

问题背景

给定如下Pandas DataFrame:

import pandas as pd

df = pd.DataFrame()
df["COL1"] = [111,222,333]
df["COL2"] = ["CV_COUNT_ABC_XM_BF, CV_COUNT_DEF_XM_BF", "CV_COUNT_DEF_XM_ BF", "LACK"]
df["COL3"] = ["LACK", "CV_COUNT_ABC_XM_BF, CV_COUNT_DEF_XM_BF", "CV_COUNT_DEF_XM_ BF xx"]

原始数据样例:

COL1   | COL2                                     | COL3
-------|------------------------------------------|---------
111    | CV_COUNT_ABC_XM_BF, CV_COUNT_DEF_XM_BF   | LACK
222    | CV_COUNT_DEF_XM_ BF                      | CV_COUNT_ABC_XM_BF, CV_COUNT_DEF_XM_BF
333    | LACK                                     | CV_COUNT_DEF_XM_ BF xx
...    | ...                                      | ...

需求说明

  • 若COL2或COL3仅为"LACK",则保持不变
  • 若COL2或COL3包含"ABC"或"DEF",仅保留"ABC"或"DEF";原内容逗号分隔的多个值,处理后仍保留逗号分隔格式
  • 删除列中除"ABC"、"DEF"、逗号或"LACK"之外的所有其他内容(如ID=333的COL3中的"xx")

期望结果

COL1   | COL2                                     | COL3
-------|------------------------------------------|---------
111    | ABC, DEF                                 | LACK
222    | DEF                                      | ABC, DEF
333    | LACK                                     | DEF
...    | ...                                      | ...

解决方案

通过自定义清洗函数结合apply方法实现,核心是精准提取目标关键词并处理格式:

import pandas as pd
import re

def clean_col(value):
    # 处理纯LACK的情况
    if value.strip() == "LACK":
        return "LACK"
    # 提取所有ABC或DEF关键词
    matches = re.findall(r'(ABC|DEF)', value)
    # 按逗号分隔格式返回结果,无匹配则返回LACK
    return ', '.join(matches) if matches else "LACK"

# 对目标列应用清洗函数
df['COL2'] = df['COL2'].apply(clean_col)
df['COL3'] = df['COL3'].apply(clean_col)

# 查看结果
print(df)

代码说明

  1. 正则提取:用re.findall(r'(ABC|DEF)', value)精准抓取内容中的"ABC"或"DEF",忽略其他无关字符
  2. 边界判断:先检查单元格是否为纯"LACK",直接返回;若未匹配到目标关键词,同样返回"LACK"
  3. 格式保持:将提取到的关键词用, 连接,还原原有的逗号分隔多值格式

运行后即可得到符合需求的清洗结果。

内容的提问来源于stack exchange,提问作者dingaro

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 06:01:44