You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL零售数据库姓名数据清洗求助:特殊字符与乱码姓名处理

姓名数据清洗解决方案

1. 修复乱码问题

你看到的ü、ä这类字符是编码错误导致的:原本的UTF-8特殊字符(比如德语的ü、ä)被错误用Latin-1(ISO-8859-1)解码了。可以通过反向编码解码修复:

# 修复first_name的编码问题
user_dataframe['first_name'] = user_dataframe['first_name'].str.encode('latin-1').str.decode('utf-8')
# 修复last_name同理
user_dataframe['last_name'] = user_dataframe['last_name'].str.encode('latin-1').str.decode('utf-8')

修复后,Hans Jürgen会变成正确的Hans Jürgen,Bärbel变成Bärbel。

2. 筛选无效姓名数据

针对字母数字混合的垃圾数据(比如2GU3G97VI1、DD0K0FUDRY),可以用正则表达式匹配合法姓名的特征:

  • 包含大小写字母、变音符号(ü/ä/ö等)
  • 允许空格(比如双名)、连字符(比如Klaus-Jürgen)
  • 不包含数字、特殊符号(除了空格和连字符)

步骤:

  1. 定义匹配合法姓名的正则表达式:
import re

# 匹配包含字母、变音符号、空格、连字符的姓名,至少1个有效字符
valid_name_pattern = re.compile(r'^[a-zA-ZÀ-ÿ\s-]+$')

(À-ÿ覆盖了大部分欧洲语言的变音字符,适合零售数据库的姓名场景)

  1. 筛选出符合规则的行:
# 同时校验first_name和last_name的合法性
user_dataframe = user_dataframe[
    user_dataframe['first_name'].apply(lambda x: valid_name_pattern.match(x) is not None) &
    user_dataframe['last_name'].apply(lambda x: valid_name_pattern.match(x) is not None)
]
  1. (快速替代方案)如果只需过滤含数字的垃圾数据,可直接用:
# 删除first_name或last_name中包含数字的行
user_dataframe = user_dataframe[~user_dataframe['first_name'].str.contains(r'[0-9]')]
user_dataframe = user_dataframe[~user_dataframe['last_name'].str.contains(r'[0-9]')]

完整流程示例

import pandas as pd
import re

# 1. 修复编码错误
user_dataframe['first_name'] = user_dataframe['first_name'].str.encode('latin-1').str.decode('utf-8')
user_dataframe['last_name'] = user_dataframe['last_name'].str.encode('latin-1').str.decode('utf-8')

# 2. 筛选合法姓名
valid_name_pattern = re.compile(r'^[a-zA-ZÀ-ÿ\s-]+$')
user_dataframe = user_dataframe[
    user_dataframe['first_name'].apply(lambda x: valid_name_pattern.match(x) is not None) &
    user_dataframe['last_name'].apply(lambda x: valid_name_pattern.match(x) is not None)
]

内容的提问来源于stack exchange,提问作者Darman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 12:50:46