为什么Python的strip方法无法去除Pandas DataFrame列中的前导空格
Pandas 城市名列空白去除失败解决方案
核心原因:str.strip()失效是因为列中的空白不是普通ASCII空格,大概率是全角空格、不间断空格、零宽空格等Unicode类空白字符,旧版本Pandas的默认str.strip()仅处理ASCII空格,无法识别这类字符。
步骤1:确认空白字符类型
先取一条带前置空白的城市名,打印首个字符的Unicode编码确认类型:
# 替换为你查到的带空白的城市名所在行的位置即可 sample_city = df_hotels['city_name'].iloc[问题行索引] print(f"原始字符串表示:{repr(sample_city)}") print(f"首个字符Unicode编码:{ord(sample_city[0])}")
常见异常编码对应:
- 12288:全角空格(
\u3000) - 160:不间断空格(
\u00a0) - 8203:零宽空格(
\u200b)
步骤2:清除异常空白
方案1:正则一次性清除所有类型前置空白
不管是什么类型的前置空白都可以用该方法匹配清除:
# 仅清左侧空白保留右侧内容,需要前后都清就去掉正则开头的^ df_hotels['city_name'] = df_hotels['city_name'].str.replace(r'^[\s\u3000\u00a0\u200b]+', '', regex=True)
方案2:手动指定strip要清除的字符集合
把第一步查到的异常空白字符补充到待清除集合中,针对性处理:
# 可根据实际查到的编码补充更多字符 strip_chars = ' \t\n\r\u3000\u00a0\u200b' df_hotels['city_name'] = df_hotels['city_name'].str.lstrip(strip_chars)
方案3:读JSON阶段提前规避
如果是JSON读取时的编码解析导致的异常,读入时就指定编码和列类型:
df_hotels = pd.read_json( "你的文件路径.json", encoding="utf-8", dtype={"city_name": str} )
步骤3:验证结果
处理完成后重新统计值计数确认问题解决:
print(df_hotels['city_name'].value_counts())
内容的提问来源于stack exchange,提问作者valskyyy
相关产品推荐
相关产品推荐

