如何在Pandas DataFrame中移除文本记录中的_x000D_
问题:无法移除Pandas DataFrame中的
_x000D_字符 从Excel导入Pandas DataFrame后,某列数据示例如下:
Link ========= A-324 A-76_x000D_\nA-676 A-95 A-95_x00D_n\nA-495 ...
已通过正则移除了\n字符,但_x000D_始终无法删除,尝试过的代码:
dat['Link'] = dat['Link'].replace("_x000D_", " ") dat['Link'] = dat['Link'].replace(r'\s+|\\n', ' ', regex=True)
想了解:_x000D_是什么?为何常规移除方法无效?
解答
1. _x000D_是什么?
_x000D_是**Windows回车符(CR,ASCII编码为13)**的XML/HTML转义表示。当Excel单元格包含Windows风格换行(\r\n,即回车+换行)时,导入Pandas过程中可能被解析为这种转义字符串,而非直接的\r字符。
2. 常规移除方法无效的原因
你使用的replace("_x000D_", " ")是按字面量字符串匹配,但实际DataFrame中的内容可能并非真正的_x000D_,而是被解析后的\r(回车符)——只是在显示时被转成了_x000D_;另外,默认的replace不启用正则模式,若目标是正则匹配转义串,需要手动开启regex=True。
3. 正确的解决方法
方式一:直接匹配回车符\r
既然_x000D_对应实际的\r字符,直接替换\r更精准:
# 替换回车、换行符为空格,再合并多余空格 dat['Link'] = dat['Link'].replace(r'\r|\n', ' ', regex=True) dat['Link'] = dat['Link'].replace(r'\s+', ' ', regex=True)
方式二:匹配字面量转义串
如果确认数据中是真实的_x000D_字符串,需开启正则模式替换:
dat['Link'] = dat['Link'].replace(r'_x000D_', ' ', regex=True) dat['Link'] = dat['Link'].replace(r'\s+', ' ', regex=True)
合并写法(一次性处理所有情况)
dat['Link'] = dat['Link'].replace(r'_x000D_|\r|\n', ' ', regex=True).str.strip()
内容的提问来源于stack exchange,提问作者324
相关产品推荐
相关产品推荐

