如何移除或转换pandas列中的非英文/非ASCII值为可读字符
pandas company_name列异常字符稳健处理方案
以下方案分别对应转义字符还原、异常值移除两类需求,可按需选择。
方向1:Unicode转义字符还原为可读字符串
针对形如<U+6B66>的转义字符,先解析HTML实体再转换Unicode编码,全程做异常兼容避免处理中断:
- 导入依赖库
import pandas as pd import html
- 编写转义还原函数
def unicode_escape_convert(s): if not isinstance(s, str): return s # 第一步:解析HTML实体,将<、>转为<、> s_unescaped = html.unescape(s) # 第二步:将<U+XXXX>格式替换为标准Unicode转义格式\uXXXX s_replaced = s_unescaped.replace('<U+', '\\u').replace('>', '') try: # 解码得到可读字符串 return s_replaced.encode('latin1').decode('unicode_escape') except: # 解码失败直接返回原字符串,不中断整体处理流程 return s
- 应用到目标列
df['company_name_clean'] = df['company_name'].apply(unicode_escape_convert)
方向2:移除非英文/非ASCII异常值
如果不需要保留非英文类字符,可直接过滤/替换不符合要求的内容:
- 仅保留ASCII可打印字符的处理函数(保留英文、数字、常用标点、空格)
def keep_ascii_only(s): if not isinstance(s, str): return '' return ''.join([c for c in s if 31 < ord(c) < 127]) # 若需要直接删除包含非ASCII字符的行,使用以下逻辑 df = df[df['company_name'].apply(lambda x: all(ord(c) < 127 for c in x) if isinstance(x, str) else False)]
规则调整说明
如果需要保留指定语言字符(例如中文),可修改判断逻辑增加对应Unicode范围校验即可,中文的Unicode范围为\u4e00-\u9fa5,加入该范围的判断条件即可避免误删合法中文字符。
内容的提问来源于stack exchange,提问作者user13227382
相关产品推荐
相关产品推荐

