You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 03:09:03