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

如何修改Python Pandas的DataFrame,提取列中指定字符间的内容?

Pandas DataFrame字符串提取处理方案

原始DataFrame

COL_1 | COL_2               | COL_3
------|---------------------|---------
111   | CV_COUNT_ABC_XM_BF  | CV_SUM_ABC_XM_BF
222   | CV_COUNT_DEF_XM_BF  | CV_SUM_CC_XM_BF
333   | CV_COUNT_CC_XM_BF   | LACK
444   | LACK                | CV_SUM_DEF_XM_BF
...   | ...                 |  ...

处理规则

  • 若COL_2或COL_3的值为"LACK",保持不变
  • 若值不为"LACK",提取"CV_COUNT_"与"XM_BF"之间,或"CV_SUM"与"_XM_BF"之间的内容

实现代码

直接用正则表达式结合Pandas的字符串替换方法即可完成,无需额外判断逻辑:

import pandas as pd

# 构造示例DataFrame
df = pd.DataFrame({
    'COL_1': [111, 222, 333, 444],
    'COL_2': ['CV_COUNT_ABC_XM_BF', 'CV_COUNT_DEF_XM_BF', 'CV_COUNT_CC_XM_BF', 'LACK'],
    'COL_3': ['CV_SUM_ABC_XM_BF', 'CV_SUM_CC_XM_BF', 'LACK', 'CV_SUM_DEF_XM_BF']
})

# 定义正则:匹配两种前缀,捕获中间目标内容
pattern = r'(?:CV_COUNT_|CV_SUM_)(.*?)_XM_BF'

# 对目标列执行替换,不匹配正则的"LACK"会自动保留
df['COL_2'] = df['COL_2'].replace(pattern, r'\1', regex=True)
df['COL_3'] = df['COL_3'].replace(pattern, r'\1', regex=True)

代码解释

  • 正则表达式(?:CV_COUNT_|CV_SUM_)(.*?)_XM_BF:(?:...)是不捕获前缀的分组,(.*?)是捕获中间内容的非贪婪分组,确保只提取两种前缀和_XM_BF之间的部分
  • str.replace方法会自动对匹配正则的内容执行替换,将整个字符串替换为捕获到的中间内容;不匹配的"LACK"则保持原样

处理后结果

COL_1 | COL_2             | COL_3
------|-------------------|---------
111   | ABC               | ABC
222   | DEF               | CC
333   | CC                | LACK
444   | LACK              | DEF
...   | ...               | ...

内容的提问来源于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 05:45:34