按字符串中的数字对列标签进行排序,Python

按字符串中的数字对列标签进行排序,Python,python,pandas,sorting,columnsorting,Python,Pandas,Sorting,Columnsorting,我已成功地将Python连接到Microsoft Access数据库。当我试图按数字递增顺序对数据框中的列标签进行排序时,就会出现问题。列名还包含字符 我已经研究了几个排序函数,但它们似乎都不能解决这个问题 我的数据框架如下 C1 C10 C11 C12 C13 C14 ... C2 C20 C21 ... C3 ... 我希望我的列如何排序 C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 ... 我的数据框还包含其他成分,如苯、甲苯等

我已成功地将Python连接到Microsoft Access数据库。当我试图按数字递增顺序对数据框中的列标签进行排序时,就会出现问题。列名还包含字符

我已经研究了几个排序函数,但它们似乎都不能解决这个问题

我的数据框架如下

C1  C10  C11  C12  C13  C14 ... C2  C20  C21 ... C3 ...
我希望我的列如何排序

C1  C2  C3  C4  C5  C6  C7  C8  C9  C10  C11 ...
我的数据框还包含其他成分,如苯、甲苯等,因此我希望列表也按字母顺序排列

此外,有没有办法将其归类为:

... C4   C5   iC5   nC5   C6   iC6   nC6.
上面的问题是最重要的,但是如果有人知道是否/如何做到这一点,请给出建议


请提前开始,谢谢你的帮助

我想这可能是您想要的答案:

data.reindex_axis(sorted(data.columns, key=lambda x: float(x[1:])), axis=1)

您可以自由修改x[1:]中的值,以在字符串中包含或排除更多字符。

对于第一种情况,您可以执行以下操作

df = df[list(sorted(df.columns.tolist()))]
对于第二种情况,或许可以反转字符串

rev = lambda cols: list(map(lambda x: "".join(list(reversed(x))), cols)) 
cols = df.columns.tolist()
df = df[rev(list(sorted(rev(df.columns.tolist()))))]

也许你可以将前缀存储在一个单独的列中?所以类似于| Prefix | Code |的东西,其中Prefix是i或n或nothing,而Code是C4.natsorted是第一种情况下需要的。看见第二个似乎有点模糊,有没有办法区分i是前缀和C不是前缀?