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

如何优化对同一pandas DataFrame列的多次apply调用写法

更优雅的实现方案

针对你多次对df['resume']列使用.apply()提取字段的场景,推荐两种更简洁高效的实现方式:

方案一:使用pd.json_normalize()直接展开嵌套JSON

如果df['resume']里的元素是字典格式(JSON结构),pandas的json_normalize()是专门处理这类嵌套数据的工具,能一次性把需要的字段展开成单独列,无需多次调用.apply():

import pandas as pd

# 直接展开resume列的指定字段,支持嵌套路径(比如gender.id)
expanded_df = pd.json_normalize(df['resume'], meta=['age', ['gender', 'id']])
# 重命名列名,让结果更清晰
expanded_df = expanded_df.rename(columns={'gender.id': 'gender'})
# 合并回原DataFrame
df = pd.concat([df, expanded_df], axis=1)

这种方式无需手动判断字段是否存在,json_normalize()会自动为不存在的字段填充NaN(等价于你代码里的None),代码更简洁,性能也比多次.apply()更好。

方案二:自定义提取函数,单次.apply()生成多列

如果只需要提取部分特定字段,也可以写一个自定义函数,一次性返回所有需要的字段值,通过一次.apply()生成多列,减少重复操作:

def extract_resume_fields(resume_dict):
    return pd.Series({
        'age': resume_dict.get('age'),  # get方法默认返回None,无需判断字段是否存在
        'gender': resume_dict.get('gender', {}).get('id')  # 嵌套字段用多层get,避免KeyError
    })

# 一次apply生成age和gender两列
df[['age', 'gender']] = df['resume'].apply(extract_resume_fields)

这里用字典的.get()方法替代了if...else判断,代码更简洁;同时通过返回pd.Series,让单次.apply()直接生成多列,避免了多次调用.apply()的冗余操作。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 07:23:35