【问题标题】:sorting csv python 2.7排序csv python 2.7
【发布时间】:2015-08-15 03:32:51
【问题描述】:

我正在尝试对第 3 列的 csv 文件进行排序。python 对 csv 进行排序,但只针对两行。真的很迷茫

这是我正在使用的代码。

import csv
import operator
import numpy

sample = open('data.csv','rU')
csv1 = csv.reader(sample,delimiter=',')
sort=sorted(csv1,key=lambda x:x[3])
for eachline in sort:
    print eachline

这是 o/p 从第三行开始,O/P 看起来不错。有什么想法吗?

['6/23/02', 'Julian Jaynes', '618057072', '12.5']
['7/15/98', 'Timothy "The Parser" Campbell', '968411304', '18.99']
['10/4/04', 'Randel Helms', '879755725', '4.5']
['9/30/03', 'Scott Adams', '740721909', '4.95']
['10/4/04', 'Benjamin Radcliff', '804818088', '4.95']
['1/21/85', 'Douglas Adams', '345391802', '5.95']
['12/3/99', 'Richard Friedman', '60630353', '5.95']
['1/12/90', 'Douglas Hofstadter', '465026567', '9.95']
['9/19/01', 'Karen Armstrong', '345384563', '9.95']
['6/23/02', 'David Jones', '198504691', '9.95']
['REVIEW_DATE', 'AUTHOR', 'ISBN', 'DISCOUNTED_PRICE']

【问题讨论】:

  • 预期输出是什么?
  • x[3] 是第 4 列,你需要 x[2]

标签: python sorting csv


【解决方案1】:

你在排序字符串,需要使用float(x[3])

sort=sorted(csv1,key=lambda x:float(x[3]))

如果要按第三列排序为 x[2],则转换为int

sort=sorted(csv1,key=lambda x:int(x[2]))

您还需要跳过标题以避免 ValueError:

csv1 = csv.reader(sample,delimiter=',')
header = next(csv1)
sort=sorted(csv1,key=lambda x:int(x[2]))

Python 将逐个字符地比较字符串,将"2" 放在"12" 之后,除非您强制转换为int:

In [82]: "2" < "12"
Out[82]: False

In [83]: int("2") < int("12")
Out[83]: True

【讨论】:

    猜你喜欢
    • 2017-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-28
    • 2017-06-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多