如何基于列名中的数字对Pandas DataFrame进行列排序?
按列名中的数字重排DataFrame列顺序
可以通过提取列名中的数字,再按数字排序列名,最后重新索引DataFrame来实现,具体步骤如下:
读取数据到DataFrame
先确保你已经用pandas加载了数据:import pandas as pd import re df = pd.read_csv("你的数据文件路径.csv") # 也可用read_excel等其他读取方式提取列名中的数字并排序列名
用正则表达式从每个列名里提取出数字N,然后根据这个数字对列名列表进行排序:# 定义函数提取列名中的数字 def extract_number(col): # 匹配列名中'-'和'<'之间的数字 num = re.findall(r'-(\d+)<', col)[0] return int(num) # 按提取的数字从小到大排序列名 ordered_columns = sorted(df.columns, key=extract_number)重新排列DataFrame的列
用排序后的列名列表重新索引DataFrame,即可得到按1到32顺序排列的列:df = df[ordered_columns]
如果想更简洁,也可以把步骤2和3合并成一行:
df = df[sorted(df.columns, key=lambda col: int(re.findall(r'-(\d+)<', col)[0]))]
补充说明
- 这里的正则表达式
r'-(\d+)<'是精准匹配你的列名格式:数字在-和<之间,确保能准确提取N。如果列名格式有细微变化,可能需要调整正则表达式。 - 假设所有列都符合给定的格式,且包含1到32的所有数字,无缺失或重复。如果有异常列,你可以先筛选出符合格式的列再排序。
内容的提问来源于stack exchange,提问作者Derik
相关产品推荐
相关产品推荐

