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

如何基于函数映射字典为DataFrame列批量应用str.title()?

问题描述

我有一个将DataFrame列名映射到处理函数的字典,已编写capitalize函数用于对列值应用str.title()实现首字母大写。现有示例代码如下:

import pandas as pd
 
data= [["English","john","smith","ohio","united states","","","manufacturing","National","Residental","","",""]]
df= pd.DataFrame(data,columns=['Communication_Language__c','firstName', 'lastName', 'state', 'country', 'company', 'email', 'industry', 'System_Type__c', 'AccountType', 'customerSegment', 'Existing_Customer__c', 'GDPR_Email_Permission__c'])

def capitalize (column,df_temp):
    if df_temp[column].notna():
        df_temp[column]=df[column].str.title()
    return df_temp

def required ():
    #something
    pass

parsing_map={
"firstName":[capitalize,required],
"lastName":capitalize,
"state":capitalize,
"country": [capitalize,required],
"industry":capitalize,
"System_Type__c":capitalize,
"AccountType":capitalize,
"customerSegment":capitalize,
}

目前只能逐个指定列名实现str.title()效果,希望无需手动逐个列名操作,直接通过上述parsing_map字典批量将capitalize函数应用到对应列,求最优实现方式。

期望输出:

data= [["English","John","Smith","Ohio","United States","","","Manufacturing","National","Residental","","",""]]
df= pd.DataFrame(data,columns=['Communication_Language__c','firstName', 'lastName', 'state', 'country', 'company', 'email', 'industry', 'System_Type__c', 'AccountType', 'customerSegment', 'Existing_Customer__c', 'GDPR_Email_Permission__c'])
最优实现方案

步骤1:修正capitalize函数

原函数存在依赖全局变量df的问题,且notna()判断冗余(str.title()会自动保留空值/空字符串的原样),优化后:

def capitalize(column, df_temp):
    # 直接对列应用首字母大写,空值/空字符串不受影响
    df_temp[column] = df_temp[column].str.title()
    return df_temp

步骤2:编写批量处理逻辑

遍历parsing_map,统一处理单个函数或函数列表,批量应用capitalize:

import pandas as pd

data= [["English","john","smith","ohio","united states","","","manufacturing","National","Residental","","",""]]
df= pd.DataFrame(data,columns=['Communication_Language__c','firstName', 'lastName', 'state', 'country', 'company', 'email', 'industry', 'System_Type__c', 'AccountType', 'customerSegment', 'Existing_Customer__c', 'GDPR_Email_Permission__c'])

def capitalize(column, df_temp):
    df_temp[column] = df_temp[column].str.title()
    return df_temp

def required():
    # 后续补充逻辑
    pass

parsing_map={
"firstName":[capitalize,required],
"lastName":capitalize,
"state":capitalize,
"country": [capitalize,required],
"industry":capitalize,
"System_Type__c":capitalize,
"AccountType":capitalize,
"customerSegment":capitalize,
}

# 批量处理核心代码
for col, funcs in parsing_map.items():
    # 把单个函数转为列表,统一处理逻辑
    funcs_list = funcs if isinstance(funcs, list) else [funcs]
    for func in funcs_list:
        # 仅执行capitalize函数,若要执行所有函数可移除该判断
        if func is capitalize:
            df = func(col, df)

# 验证结果
print(df)

逻辑说明

  • 遍历parsing_map的每一列及其对应的处理函数,统一将单个函数转为列表格式,避免分支判断。
  • 筛选出capitalize函数并执行,传入列名和DataFrame,实现批量处理。
  • 若后续需要执行required函数,只需移除if func is capitalize:的判断即可,保持代码扩展性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 07:40:20