我有一个带有标题的数据框,它是'string-integers'的列表:
import pandas as pd
d = {'1': [1, 2], '7': [3, 4], '3': [3, 4], '5': [2, 7]}
df = pd.DataFrame(data=d)
1 3 5 7
0 1 3 2 3
1 2 4 7 4
此列的代码更改顺序(sort):
cols = df.columns.tolist()
cols = [int(x) for x in cols]
cols.sort()
cols = [str(x) for x in cols]
df = df[cols]
1 3 5 7
0 1 3 2 3
1 2 4 7 4
我对这个解决方案不满意。当然,我可以在函数中隐藏它,但可能存在更优雅的方法。
答案 0 :(得分:1)
根据您的需要,有几种选择。
选项1
您可以使用sort_values
排序为字符串:
df.columns = df.columns.sort_values()
注意这意味着“10”将在“2”之前出现。
选项2
如果您希望转换为整数然后排序:
df.columns = df.columns.astype(int).sort_values()
选项3
如果你想保持字符串,但按整数值排序:
df.columns = df.columns.astype(int).sort_values().astype(str)
纯Python方法也是可能的:
df.columns = sorted(df, key=int)