清洗Python DataFrame:将Gender列统一为Male/Female格式
统一DataFrame中Gender列的性别表述方案
问题分析
你的代码没生效大概率是这几个原因:
- 没处理大小写差异:比如
Female、F不在你的misspellings列表里,精确匹配碰不到 - 没清理前后空格:如果单元格里是
female(带空格),精确匹配也找不到 - 仅覆盖了部分女性变体,且没处理男性的类似情况
- 循环
replace效率低,且容易遗漏边缘情况
解决方案
方法1:统一格式化后用字典批量映射(推荐)
先把所有文本转小写、去空格,再用字典一次性完成所有替换,清晰高效:
import pandas as pd df = pd.read_csv('my csv file.csv') # 第一步:统一格式化——转小写+去除前后空格,避免空格/大小写干扰 df['Gender'] = df['Gender'].astype(str).str.strip().str.lower() # 第二步:定义所有性别变体的映射规则,把所有对应女性/男性的表述统一 gender_mapping = { # 女性相关变体 'female': 'Female', 'f': 'Female', 'woman': 'Female', 'femail': 'Female', 'cis-female/femme': 'Female', 'female (cis)': 'Female', 'cis female': 'Female', 'femake': 'Female', # 男性相关变体,根据你的数据补充 'male': 'Male', 'm': 'Male', 'man': 'Male', 'cis-male': 'Male', 'male (cis)': 'Male' } # 第三步:完成映射,未匹配到的设为'Other'(也可以保留原内容,根据需求调整) df['Gender'] = df['Gender'].map(gender_mapping).fillna('Other')
方法2:正则表达式匹配替换
如果变体更多,用正则可以更灵活地匹配相似表述:
import pandas as pd df = pd.read_csv('my csv file.csv') # 先统一格式化 df['Gender'] = df['Gender'].astype(str).str.strip().str.lower() # 匹配所有女性变体,替换为Female df['Gender'] = df['Gender'].replace( r'^(female|f|woman|femail|cis-female/femme|female \(cis\)|cis female|femake)$', 'Female', regex=True ) # 匹配所有男性变体,替换为Male df['Gender'] = df['Gender'].replace( r'^(male|m|man|cis-male|male \(cis\))$', 'Male', regex=True ) # 未匹配的设为Other df['Gender'] = df['Gender'].where(df['Gender'].isin(['Female', 'Male']), 'Other')
验证结果
替换后执行以下代码,检查性别列的分布是否符合预期:
print(df['Gender'].value_counts())
内容的提问来源于stack exchange,提问作者user16674853
相关产品推荐
相关产品推荐

