You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python如何对带表头的CSV文件按数值列排序且保留表头位置

解决方案

直接在排序的key函数中添加表头判断逻辑即可,不需要拆分表头和数据行,全程可以用极简代码完成:

import csv

# 读取文件并完成排序
with open('CleanReport.csv', 'r', encoding='utf-8') as f:
    reader = csv.reader(f)
    # 表头行的Age列为非数字,返回无穷大保证降序时永远排在第一位,其余行转整数排序
    sorted_rows = sorted(reader, key=lambda x: int(x[2]) if x[2].isdigit() else float('inf'), reverse=True)

# 一次性写入排序后所有内容,无需单独处理表头
with open('SortedCleanReport.csv', 'w', encoding='utf-8', newline='') as f:
    csv.writer(f).writerows(sorted_rows)

# 验证输出
for row in sorted_rows:
    print(row)

逻辑说明

  1. 原来lambda转int报错是因为表头行的第2索引取值为字符串Age,无法转成整数,这里通过isdigit()判断区分表头和数据行
  2. 表头行返回float('inf')(无穷大),配合reverse=True降序规则,无穷大是最大值,会固定排在所有行的最前面
  3. 数据行直接把Age列转成整数作为排序依据,实现数值维度的降序排序
  4. 写入时直接调用writerows方法批量写入所有排序后的行,不需要单独写入表头,也不需要逐行循环写入,完全避开你提到的四个繁琐步骤。

如果你的Age列存在负数场景,把判断条件改成x[2].lstrip('-').isdigit()即可兼容。


内容的提问来源于stack exchange,提问作者Rudra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 03:06:04