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

Pandas列批量替换特殊字符并插入分隔符的优化实现

Pandas DataFrame 字符串处理优化方案

问题说明

你的 Pandas DataFrame 里 Country_list 列的数据是这样的:

{'INDIA': '98.31%', 'ASEAN': '1.69%'}
{'KOREA': '100.0%'}
{'INDIA': '95.00%', 'ASEAN': '2.50%','ANZ': '2.50%'}
{'INDIA': '95.00%', 'ASEAN': '2.50%','ANZ': '1.25%','KOREA': '1.25%'}

你需要完成两个需求:

  • 把所有数字、特殊字符(比如{}:%'这些)都删掉,只保留区域名称
  • 不同区域名称之间用逗号分隔开

你之前写了一串链式替换的代码,但觉得太繁琐:

df['Country_list'] = df['Country_list'].str.replace(r":",'', regex=True).str.replace(r"%", '', regex=True).str.replace(r"{",'', regex=True).str.replace(r"}",'', regex=True)

想要的最终输出是:

INDIA,ASEAN
KOREA
INDIA,ASEAN,ANZ
INDIA,ASEAN,ANZ,KOREA

高效解决办法

直接用正则提取目标区域名称,一步到位,比多次替换简洁多了:

最优方案:提取区域名称再拼接

df['Country_list'] = df['Country_list'].str.findall(r'([A-Z]+)').str.join(',')

原理很简单:str.findall(r'([A-Z]+)') 会把每一行里所有连续的大写字母(也就是你的区域名称)都提取出来,变成一个列表;再用str.join(',')把列表里的元素用逗号连起来,正好就是你要的格式。

备选方案:一次性清除非目标字符

如果以后区域名称可能包含其他字符,也可以用这招,先把所有非字母、非逗号的字符删掉,再整理格式:

df['Country_list'] = df['Country_list'].str.replace(r'[^A-Z,]', '', regex=True).str.replace(r',+', ',', regex=True).str.strip(',')

不过第一个方案更精准,毕竟你要的就是那些大写的区域名,直接提取比清理垃圾字符更高效。

验证结果

运行第一个方案的代码后,Country_list列就会完全符合你的期望输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 11:52:47