为何无法移除Pandas中desc列的非字母数字字符?
解决方法
问题根源
- Pandas版本兼容问题:Pandas 2.0及以上版本中,
str.replace()默认regex=False,会把传入的模式当作普通字符串而非正则表达式处理,导致你的正则规则未生效。 - HTML实体未解码:结果中的
&是HTML转义字符(对应&),未解码前无法被正则匹配为非字母数字字符。
修复代码
import pandas as pd import html # 读取数据 df = pd.read_csv('911.csv') # 1. 解码HTML实体,还原特殊字符 df['desc'] = df['desc'].apply(html.unescape) # 2. 用正则移除所有非字母数字字符,显式指定regex=True df['desc'] = df['desc'].str.replace(r'[^a-zA-Z0-9]', '', regex=True) # 查看处理后的前5行数据 print(df['desc'].head())
额外说明
- 如果不需要保留空格,上述正则已经覆盖;如果需要保留空格,可将正则改为
r'[^a-zA-Z0-9\s]'(\s匹配空格、换行等空白字符)。 - 若你使用的是Pandas 1.x版本,
str.replace()默认regex=True,但仍需处理HTML实体才能彻底移除所有非字母数字字符。
内容的提问来源于stack exchange,提问作者david yen2
相关产品推荐
相关产品推荐

