如何对含字典的DataFrame列按值进行排序?
解决方案
假设你的数据存储在Pandas DataFrame的Column_1列中,以下是实现字典按值排序的完整代码:
核心步骤
- 将字符串格式的字典解析为Python原生字典对象
- 对字典的键值对按值进行升序排序
- 重新组合为有序字典(Python3.7+原生字典支持插入顺序)
- 转换回符合要求的字符串格式
代码实现
import pandas as pd import ast def sort_dict_by_value(dict_str): # 安全解析字符串为字典(避免eval的风险) original_dict = ast.literal_eval(dict_str) # 按值排序键值对,x[1]代表取键值对中的值作为排序依据 sorted_items = sorted(original_dict.items(), key=lambda x: x[1]) # 生成排序后的字典 sorted_dict = dict(sorted_items) # 调整字符串格式匹配示例输出 return str(sorted_dict).replace(": ", ": ").replace(",", " , ") # 模拟你的数据集 df = pd.DataFrame({ "Column_1": [ '{"X":5 , "Y" :10 , "Z" : 6}', '{"X":0.4 , "Y": 0.1}', '{"Z":0.55, "W": 7 , "X":3}' ] }) # 对目标列批量处理 df["Column_1"] = df["Column_1"].apply(sort_dict_by_value) print(df)
输出结果
Column_1 0 {'X': 5 , 'Z': 6 , 'Y': 10} 1 {'Y': 0.1 , 'X': 0.4} 2 {'Z': 0.55 , 'X': 3 , 'W': 7}
你之前可能踩的坑
- 直接对字符串用
sorted():会把字符串拆成单个字符排序,而非处理字典结构 - 未指定排序
key:默认sorted()会按字典的键排序,需要显式指定key=lambda x: x[1]来按值排序 - 用
eval()解析字符串:存在代码注入风险,推荐使用ast.literal_eval()做安全解析
内容的提问来源于stack exchange,提问作者james
相关产品推荐
相关产品推荐

