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

如何利用Python API从Pandas列姓名中检测性别并生成新列

批量处理Pandas姓名列的性别检测方案

1. 预处理姓名(处理带头衔的情况)

部分姓名可能包含头衔(如Dr. Sylvia),需要先提取核心名字部分才能准确调用API。这里用正则去掉常见头衔,再取最后一个单词作为检测用的姓名:

import pandas as pd
import re

def extract_name(full_name):
    # 移除常见头衔,提取核心姓名
    cleaned = re.sub(r'^(Dr\.|Mr\.|Ms\.|Mrs\.|Miss\.)\s', '', full_name.strip())
    return cleaned.split()[-1]

# 构造示例DataFrame
data = {'name': ['Walker', 'Daniel', 'Steph', 'Dr. Sylvia', 'Gwendy']}
df = pd.DataFrame(data)
# 生成清洗后的姓名列
df['cleaned_name'] = df['name'].apply(extract_name)

2. 封装API调用函数(带缓存与错误处理)

原测试代码的URL参数有空格(?name = {name})会导致请求失败,这里修复格式,同时加入缓存避免重复请求、错误处理应对API异常:

import requests
from functools import lru_cache

@lru_cache(maxsize=1000)  # 缓存已请求过的姓名结果,减少API调用次数
def get_gender(name):
    try:
        response = requests.get(f"https://api.genderize.io/?name={name}", timeout=5)
        response.raise_for_status()  # 触发HTTP错误(如404、500)
        gender_data = response.json()
        # 提取性别并转为大写,无结果则返回None
        return gender_data.get('gender').upper() if gender_data.get('gender') else None
    except requests.exceptions.RequestException as e:
        print(f"请求姓名 {name} 时出错: {str(e)}")
        return None

3. 批量生成性别列

将清洗后的姓名传入API函数,生成最终的性别列,同时处理空值:

# 生成性别列
df['gender'] = df['cleaned_name'].apply(get_gender)
# 空值填充为"Unknown"
df['gender'] = df['gender'].fillna('Unknown')

# 查看结果
print(df[['name', 'gender']])

注意事项

  • API限制:genderize.io免费版有请求次数上限(每月1000次),如果处理大量数据,建议考虑本地性别数据集或者付费版API。
  • 姓名预处理逻辑可根据实际数据调整:比如如果姓名是全名(如John Doe),可能需要取第一个单词作为检测用姓名。
  • 缓存可以大幅提升重复姓名的处理效率,避免不必要的API调用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 22:25:24