如何以更优雅的Pandas风格调整DataFrame列的排序顺序?
更优雅的字符串整数列名排序方法
确实,你现有的实现虽然能完成列排序,但来回转换类型的步骤有点冗余。这里有几种更简洁、Pythonic的方式来实现相同的效果:
方法一:直接用sorted()的key参数一步到位
这是最简洁的写法,利用sorted函数的key参数直接指定排序依据为整数类型,无需额外的中间变量:
import pandas as pd d = {'1': [1, 2], '7': [3, 4], '3': [3, 4], '5': [2, 7]} df = pd.DataFrame(data=d) # 一行代码完成列排序 df = df[sorted(df.columns, key=int)]
执行后输出的DataFrame列顺序就是按整数大小排列的:
1 3 5 7 0 1 3 2 3 1 2 4 7 4
方法二:使用reindex()明确重排列
如果你想让代码意图更清晰,可以用pd.DataFrame.reindex()方法,同样结合sorted的key参数:
df = df.reindex(sorted(df.columns, key=int), axis=1)
axis=1指定操作的是列轴,这个写法可读性更强,适合团队协作时让其他开发者一眼看懂你的意图。
为什么这些方法更优雅?
相比你原来的实现:
- 省去了将列名转成列表、循环转换类型、再转回字符串的冗余步骤
- 代码更紧凑,逻辑更连贯
- 保留了原列名的字符串类型,同时实现了按整数大小排序的需求
注意:这些方法仅适用于列名都是可转换为整数的字符串的场景,如果列名中存在非整数格式的字符串,会抛出
ValueError,这和你原方法的限制是一致的。
内容的提问来源于stack exchange,提问作者Quant Christo
相关产品推荐
相关产品推荐

