DataFrame中循环替换值操作失效问题求助
问题原因分析
你的问题出在循环中传递给replace()的参数错误:dfCategorical里的value是字符串(比如'studylevel'),但pd.Series.replace()需要的是字典映射对象,而不是字典的名称字符串。你现在相当于尝试用字符串去做替换匹配,自然不会生效。
修复方案
最清晰可靠的方式是把所有分类映射字典放到一个统一的大字典中,这样可以直接通过键名获取对应的映射:
修正后的完整代码
import pandas as pd # Create a test data frame df = pd.DataFrame([{'Q1_2':1,'Q1_3':4},{'Q1_2':1,'Q1_3':4},{'Q1_2':1,'Q1_3':4},{'Q1_2':1,'Q1_3':4}]) # 统一管理所有分类映射字典,方便后续维护和调用 category_maps = { 'studylevel': { 1:'Undergraduate (Bachelor level)', 2:'Graduate (Master level)', 3:'PhD', 4:'Other (e.g., MBA)' }, 'studyfield': { 1:'Arts / Humanities (e.g., cultural studies, history, linguistics, philosophy, religion)', 2:'Business / Management', 3:'Computer sciences / IT', 4:'Economics', 5:'Engineering (incl. architecture)', 6:'Human medicine / health sciences', 7:'Law', 8:'Mathematics', 9:'Natural sciences', 10:'Science of art (e.g., art, design, dramatics, music)', 11:'Social sciences (e.g., psychology, politics, education)', 12:'Other' } } dfCategorical = {'Q1_2':'studylevel', 'Q1_3':'studyfield'} for key, map_name in dfCategorical.items(): print(key, map_name) # 从统一字典中获取对应的映射,传递给replace()完成替换 df.loc[:, key] = df.loc[:, key].replace(category_maps[map_name]) # 查看替换结果 print(df)
可选方案(不推荐)
如果你不想重构字典结构,也可以通过globals()函数直接获取全局变量中的字典对象,但这种方式可读性较差,不利于后续代码维护:
for key, map_name in dfCategorical.items(): print(key, map_name) df.loc[:, key] = df.loc[:, key].replace(globals()[map_name])
验证结果
执行修正后的代码后,你的DataFrame会成功将数字替换为对应的文本标签,输出结果如下:
Q1_2 Q1_3 0 Undergraduate (Bachelor level) Economics 1 Undergraduate (Bachelor level) Economics 2 Undergraduate (Bachelor level) Economics 3 Undergraduate (Bachelor level) Economics
内容的提问来源于stack exchange,提问作者fredooms
相关产品推荐
相关产品推荐

