Pandas如何按含日期的列名对DataFrame列顺序进行排序
问题本质
你用错了pandas方法:sort_values()的作用是根据指定列的单元格值对行做排序,从来不是用来调整列排列顺序的,和列名是不是日期格式没有任何关系。你传入列顺序列表当参数的用法本身不符合该方法的设计逻辑,自然达不到预期效果。
正确实现方式
pandas调整自定义列顺序不需要调用特殊排序方法,直接传入目标顺序的列名列表做列索引即可,该方法对所有格式的列名(包括日期字符串、datetime类型列名)都生效,不存在识别问题。
对应代码如下:
# 定义目标列顺序 order = ['more data', 'data', '2011-01-01', '2010-01-01'] # 按指定顺序重排列 df = df[order]
执行后得到的DataFrame列顺序完全和你定义的order列表一致,结构如下:
| more data | data | 2011-01-01 | 2010-01-01 |
|---|---|---|---|
| xyz | abc | 456 | 123 |
| abc | xyz | 456 | 123 |
补充说明:如果你的列名实际是
datetime时间类型而非字符串,只需要把order列表里的对应元素也转成匹配的datetime对象,上述写法依然可以正常运行,不会出现列名识别失败的问题。
内容的提问来源于stack exchange,提问作者Spiinner
相关产品推荐
相关产品推荐

