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

Pandas Series星期数据排序报ValueError,求周一至周日排序方案

解决Pandas按自定义星期顺序排序的ValueError问题

错误原因分析

你碰到的ValueError: 'T' is not in list问题很明确:代码里的lambda x: order.index(x[0])是取了星期字符串的第一个字符(比如Thursday的首字母是T),但你的order列表里存的是完整的星期名称(比如"Thursday"),自然找不到单个字符对应的索引,所以触发了报错。

正确解决方案

要实现按周一到周日的自定义顺序排序,推荐用Pandas的**分类类型(Categorical)**来处理,这是最高效且贴合Pandas数据结构的方式,还能直接支持后续可视化的顺序需求:

import pandas as pd

# 读取数据
data_file = pd.read_csv('./data/Chicago-2016-Summary.csv')

# 定义自定义星期顺序
week_order = ["Monday","Tuesday","Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]

# 将day_of_week列转为分类类型,指定自定义顺序
data_file['day_of_week'] = pd.Categorical(
    data_file['day_of_week'],
    categories=week_order,
    ordered=True
)

# 对整个数据集按day_of_week排序(其他列会跟着同步排序)
sorted_data = data_file.sort_values('day_of_week')

# 提取排序后的星期列
sorted_days = sorted_data['day_of_week']
print(sorted_days)

为什么用分类类型?

  • 排序效率更高:不需要每次调用index()遍历列表,尤其适合大数据集
  • 可视化友好:转为有序分类后,matplotlib、seaborn等绘图库会自动按照你定义的周一到周日顺序渲染图表,不用额外调整顺序参数
  • 保留原数据结构:排序后整个数据框的行对应关系不会被破坏,方便后续分析

备选方案(仅排序单列)

如果你只需要单独对day_of_week列排序,也可以修正sorted函数的key参数(去掉x[0],直接用完整的星期字符串):

import pandas as pd

data_file = pd.read_csv('./data/Chicago-2016-Summary.csv')
week_order = ["Monday","Tuesday","Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]

# 注意这里key是x而不是x[0]
sorted_days_list = sorted(data_file['day_of_week'], key=lambda x: week_order.index(x))
# 转成Pandas Series(如果需要的话)
sorted_days = pd.Series(sorted_days_list)
print(sorted_days)

不过这个方法的缺点是:仅返回排序后的星期列表,原数据框的其他列不会同步排序,且order.index(x)在数据量大时效率较低。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:51:42