Pandas处理Start time列sort_values传by参数报TypeError问题咨询
报错根因
- 你当前调用
sort_values的对象是单列pandas.Series,不是完整的DataFrame。by参数是DataFrame版sort_values的专属参数,作用是指定多列排序时的参考列;Series是一维结构,根本不存在传by参数的入口,触发TypeError是必然结果。 - 你代码里写的
by=['Date']本身也存在参数值错误:当前DataFrame根本没有名为Date的列,参考列名和实际列名完全不匹配。 - 你之前尝试无参数调用
sort_values看不到效果,是因为你写的paradas["Start time"] = 单列排序结果的赋值方式,只会单独把"Start time"列的元素打乱重排,其他列的行顺序完全不会同步调整,不仅会造成行和数据的对应关系错乱,还因为没有设置正确的排序方向,看起来就像排序操作完全没有生效。
保留datetime格式的可落地解决方案
已转换为datetime64[ns]的时间列本身支持数值大小比较,完全不需要转回字符串格式做排序,直接按以下方式操作即可实现整表正向时间排序,适配后续绘图需求:
- 先明确排序方向:你当前的表是降序状态——最新的2020年12月时间在表首,最早的2019年12月时间在表尾。要调整为正向时间顺序(从最早时间到最新时间排列),需要设置升序规则。
- 正确的整表排序写法:
各参数的作用:# 按"Start time"列升序排列整表,排序后重置索引避免乱序 paradas = paradas.sort_values(by="Start time", ascending=True, ignore_index=True)by="Start time":因为是对整个DataFrame调用排序方法,传参指定以"Start time"列作为排序依据ascending=True:实现时间从早到晚的正向排序ignore_index=True:排序完成后重置行索引,避免原有乱序的索引值影响后续绘图逻辑
- 如果你仅需要单独获取排序后的时间序列(不需要调整整表结构),直接对单列调用无多余参数的sort_values即可,Series本身就是一维结构,不需要额外指定排序依据:
# 得到按时间升序排列的时间列,完整保留datetime64[ns]格式 sorted_time = paradas["Start time"].sort_values(ascending=True)
避坑提示
- 不要对单列Series传入
by参数,这个用法仅在整表排序场景下生效 - 不需要转回字符串格式做时间排序:已转换为
datetime64[ns]的列排序效率和准确性远高于字符串排序,且可以直接作为matplotlib/seaborn绘图的X轴参数,不需要额外格式转换 - 之前你写的
ascending=False是反向排序规则,会把最新时间排在最前面,和你要的正向排序需求刚好相反
内容的提问来源于stack exchange,提问作者Azar_y_Kaos
相关产品推荐
相关产品推荐

