如何通过字典映射函数将DataFrame语言列转换为指定缩写?
问题:DataFrame列值替换函数未生效,如何通过字典调用函数实现替换?
我尝试用列名映射函数的字典,将DataFrame里的“English”替换为缩写“ENG”,但编写的lang函数没生效,相关代码如下:
import pandas as pd data = [["john","","","English","","","","","","","","",""]] df = pd.DataFrame(data,columns=['firstName', 'lastName', 'state', 'Communication_Language__c', 'country', 'company', 'email', 'industry', 'System_Type__c', 'AccountType', 'customerSegment', 'Existing_Customer__c', 'GDPR_Email_Permission__c']) filename = 'Template' lang_trans = {"English":"ENG", "French":"FR"} def lang(lang_trans, df): df.replace(lang_trans, inplace=True) df.str.upper() return df # 这里原代码语法错误,缺少等号 parsing_map{ "Communication_Language__c": lang}
期望输出:
data = [["john","","","ENG","","","","","","","","",""]] df = pd.DataFrame(data,columns=['firstName', 'lastName', 'state', 'Communication_Language__c', ...])
问题分析与修正方案
函数逻辑问题:
- 原函数接收整个DataFrame,
df.str.upper()会因非字符串列报错,且未赋值导致无实际效果;同时不需要对全表操作,只需处理目标列。 - 修正后函数接收要处理的列(Series对象),直接对列执行替换。
- 原函数接收整个DataFrame,
字典定义语法错误:
- 原代码
parsing_map{...}缺少等号,正确写法是parsing_map = {...}。
- 原代码
函数调用逻辑:
- 需要遍历字典,针对每个列名调用对应函数,传入翻译字典和该列数据。
完整可运行代码
import pandas as pd data = [["john","","","English","","","","","","","","",""]] df = pd.DataFrame(data,columns=['firstName', 'lastName', 'state', 'Communication_Language__c', 'country', 'company', 'email', 'industry', 'System_Type__c', 'AccountType', 'customerSegment', 'Existing_Customer__c', 'GDPR_Email_Permission__c']) filename = 'Template' lang_trans = {"English":"ENG", "French":"FR"} def lang(lang_trans, df_col): # 对目标列执行替换,inplace=True直接修改原列 df_col.replace(lang_trans, inplace=True) # 如果需要确保值为大写,可添加此行(可选) # df_col = df_col.str.upper() return df_col # 修正字典定义语法 parsing_map = { "Communication_Language__c": lang } # 遍历字典,自动处理对应列 for col_name, func in parsing_map.items(): df[col_name] = func(lang_trans, df[col_name]) # 验证结果 print(df['Communication_Language__c'].values) # 输出:['ENG']
补充说明
- 函数
lang现在专门处理单个列,避免了全表操作的错误。 - 后续若需添加其他列的处理逻辑,只需在
parsing_map中新增列名与对应函数的键值对即可。
内容的提问来源于stack exchange,提问作者user20235106
相关产品推荐
相关产品推荐

