如何修改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
相关产品推荐
相关产品推荐

