pandas DataFrame中字符串格式列表的元素排序问题求解
问题根源
你存储在col1列的内容是JSON格式的字符串,并非Python原生列表对象。直接对字符串执行排序操作时,程序会将字符串按单个字符拆分为序列进行排序,这就是你得到乱序结果的原因。
解决方案
核心逻辑是先将字符串反序列化为Python列表,排序后再按需序列化为符合上传要求的字符串格式。
完整代码示例
import pandas as pd import json from natsort import natsorted # 构造示例DataFrame d = {'col1': ['["3 oz","1 oz","2 oz"]', '["1.2 in","1 in","1.3 in"]', '["10 in","22 in","3.4 in"]']} df = pd.DataFrame(data=d) # 定义排序处理函数 def sort_numeric_unit_str(s): # 将JSON格式字符串转为Python列表 raw_list = json.loads(s) # 对列表执行自然排序,适配数字+单位的排序规则 sorted_list = natsorted(raw_list) # 序列化为符合上传要求的字符串格式,不需要可删除本行,直接返回sorted_list return json.dumps(sorted_list) # 应用到目标列 df['col1'] = df['col1'].apply(sort_numeric_unit_str)
处理结果示例
| 原字符串 | 排序后字符串 |
|---|---|
["3 oz","1 oz","2 oz"] | ["1 oz","2 oz","3 oz"] |
["1.2 in","1 in","1.3 in"] | ["1 in","1.2 in","1.3 in"] |
["10 in","22 in","3.4 in"] | ["3.4 in","10 in","22 in"] |
可选容错方案
如果你的字符串存在非标准JSON的转义格式,可使用ast.literal_eval替代json.loads做反序列化,容错性更高:
import ast raw_list = ast.literal_eval(s)
内容的提问来源于stack exchange,提问作者Shawn Jamal
相关产品推荐
相关产品推荐

