【问题标题】:python - sort csv files by columns, while preserving the headerpython - 按列对csv文件进行排序,同时保留标题
【发布时间】:2017-11-07 01:23:56
【问题描述】:

我将 csv 导入 python,现在我有一个看起来像这样的嵌套列表。

data = [['header1,'header2','header3'...], [1,2,3...], [a,b,c...] ]

所以第一行是标题行,其余的是实际数据。我想使用以下代码对数据进行排序:

data = sorted(data, key = lambda x: x[1]) #-> sorts data by the 2nd header

但是当我这样做时,代码也会对标题行进行排序,并且我的标题位于数据中某处的中间。如何在第一行保留我的标题,同时对其余部分进行排序? 我见过一些使用 operator.itemgetter() 的代码,但我不想这样做

【问题讨论】:

  • 我确定您可以删除标题并将其存储为另一个变量,然后将其添加到排序数据的前面
  • 我试过了,但由于某种原因我出错了

标签: python python-3.x list sorting


【解决方案1】:

你可以像这样对数组的一个切片进行排序:

data = [['header1','header2','header3'], 
        [1, 2, 3], 
        [2, 3, 4], 
        [5, 6, 7], 
        [3, 4, 5],
        [7, 8, 9], 
        [6, 3, 4] 
]

data[1:] = sorted(data[1:], key = lambda x: x[0])

这会获取从第一个元素开始的所有内容,对其进行排序,然后将其重新分配给数组的同一切片。

现在的数据是:

 [['header1', 'header2', 'header3'], 
 [1, 2, 3], 
 [2, 3, 4], 
 [3, 4, 5], 
 [5, 6, 7], 
 [6, 3, 4], 
 [7, 8, 9]
 ]

【讨论】:

  • 我什至可能会推荐data[1:].sort(key = lambda x: x[1])... 它可能会减少大型数据集的内存占用。 (OP 有问题 x[1],而不是 x[0]
【解决方案2】:

排序(数据[1:], key=lambda x: x[1])

【讨论】:

  • 您能否添加更多解释
猜你喜欢
  • 2014-10-26
  • 2015-12-24
  • 1970-01-01
  • 2015-10-29
  • 2021-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-21
相关资源
最近更新 更多