如何在Pandas列中替换多个连续空格(千万级数据表)
解决DataFrame批量替换连续空格的问题
问题原因
你之前的两种方法失效的核心原因:
re.sub(' +',' ',df['Address']):re.sub仅支持单个字符串处理,直接传入Pandas Series无法逐行解析数据。df.Address.replace(' +',' '):默认是普通字符串匹配(需完全匹配才替换),未启用正则解析模式。
高效解决方案(适配1000万行数据)
方法1:正则匹配指定长度连续空格(精准控制)
使用Pandas的str.replace方法,指定正则规则并开启正则模式,精准替换2-20个连续空格:
import pandas as pd # 示例数据 df = pd.DataFrame({'Address':['123 street city name country']}) # 替换2-20个连续空格为单个空格 df['Address'] = df['Address'].str.replace(r' {2,20}', ' ', regex=True)
如果需要匹配所有空白字符(如制表符),把正则改为r'\s{2,20}'即可。
方法2:分割拼接法(大数据量下更高效)
对于仅需合并任意数量连续空格的场景,用分割+拼接的方式效率更高:
df['Address'] = df['Address'].str.split().str.join(' ')
str.split()默认按任意数量空白字符分割(自动忽略首尾空格),再用单个空格拼接所有分割后的元素。
方法3:预编译正则(重复处理场景优化)
如果需要多次执行同类替换,预编译正则可减少重复解析开销:
import re # 预编译正则规则 pattern = re.compile(r' {2,20}') df['Address'] = df['Address'].str.replace(pattern, ' ', regex=True)
验证结果
处理后Address字段的输出为:
0 123 street city name country Name: Address, dtype: object
内容的提问来源于stack exchange,提问作者frank
相关产品推荐
相关产品推荐

