如何仅翻转DataFrame列中值以'test'开头的字典键值对?
解决方法
可以通过定义一个处理单个字典的函数,结合pandas.Series.apply()来高效完成需求,不用低效的iterrows()循环。
完整代码示例
import pandas as pd # 构造原DataFrame df = pd.DataFrame({ 'dict_col': [ {'aaa':'bbb'}, {'123':'test a'}, {'345':'test b','ccc':'dd','789':'test c'} ] }) # 定义处理单个字典的函数 def flip_test_pairs(d): new_dict = {} for k, v in d.items(): if isinstance(v, str) and v.startswith('test'): # 翻转值以'test'开头的键值对 new_dict[v] = k else: # 保留其他键值对不变 new_dict[k] = v return new_dict # 应用函数处理列 df['dict_col'] = df['dict_col'].apply(flip_test_pairs) print(df)
输出结果
dict_col 0 {'aaa': 'bbb'} 1 {'test a': '123'} 2 {'test b': '345', 'ccc': 'dd', 'test c': '789'}
逻辑说明
- 处理函数
flip_test_pairs:遍历输入字典的每个键值对,先判断值是否为字符串且以test开头:- 满足条件时,将值作为新键、原键作为新值存入新字典
- 不满足条件时,直接保留原键值对
apply()方法:对dict_col列的每个字典元素批量应用处理函数,相比iterrows()更简洁且性能更优
内容的提问来源于stack exchange,提问作者RustyShackleford
相关产品推荐
相关产品推荐

