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

Python Pandas自定义排序CSV数据集时遇TypeError问题求助

自定义排序CSV数据集问题

原始数据集

Name      Style      ID
0  heels    High end     1
1  sneaker    Middle     0
2  top      High end     3
3  skirt     Low end     6
4  dress    High end     4
5  sweater   Low end     9
6  hat        N/A.       2
..

需求描述

需要按自定义规则排序数据集:优先排列High end、Middle、Low end类型,其余类型后置,目标排序结果如下:

Name      Style      ID
0  heels    High end     1
1  top      High end     3
2  dress    High end     4
3  sneaker    Middle     0
4  skirt     Low end     6
5  sweater   Low end     9
6  hat        N/A.       2
...

尝试的代码及错误

第一次尝试

sort_order = {'High End':0,
              'Middle':1, 'Low end':2,}
Clothing_Df['Style'].apply(lambda x: sort_order[x])

触发错误:

TypeError: list indices must be integers or slices, not str

第二次尝试

sortlist = ['High End':0,
            'Middle':1, 'Low end':2,]
sorted(Clothing_Df['Style'], key= sortlist)

同样触发上述TypeError。


解决方案

问题分析

  1. 第一个错误核心:字典键High End与数据集中的High end大小写不匹配,且遇到不在字典中的值(如N/A.)会直接报错;另外代码未完成排序逻辑,仅生成排序键。
  2. 第二个错误核心:['High End':0,...]是非法语法(列表不能用键值对),且sorted的key参数需要传入函数,不能直接传字典。

正确实现代码

方法一:字典映射+临时排序键(通用兼容)

# 确保键名与数据集中的Style值完全匹配
sort_order = {'High end': 0, 'Middle': 1, 'Low end': 2}
# 给不在规则内的类型分配大数值,使其排在最后
Clothing_Df['sort_key'] = Clothing_Df['Style'].map(lambda x: sort_order.get(x, 3))
# 按临时键排序后删除该列
sorted_df = Clothing_Df.sort_values('sort_key').drop('sort_key', axis=1)

方法二:分类数据类型(大数据集高效首选)

import pandas as pd

# 定义自定义排序的分类顺序
custom_order = ['High end', 'Middle', 'Low end']
# 将Style列转为分类类型,指定顺序并标记为有序
Clothing_Df['Style'] = pd.Categorical(Clothing_Df['Style'], categories=custom_order, ordered=True)
# 直接按Style列排序
sorted_df = Clothing_Df.sort_values('Style')

该方法无需创建临时列,分类类型的排序效率远高于普通字符串排序,适合大规模数据集。

关键注意事项

  • 必须保证分类规则中的字符串与数据集中的Style值完全一致(包括大小写、空格、标点)。
  • 若存在多种"其余类型",pd.Categorical会自动将所有不在categories内的值统一排在最后,无需额外处理。

内容的提问来源于stack exchange,提问作者DataandCodes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 21:10:45