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
相关产品推荐
相关产品推荐

