簡體   English   中英

排序csv python 2.7

[英]sorting csv python 2.7

我正在嘗試對第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']

您正在對字符串進行排序,需要使用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]))

除非您強制轉換為int,否則Python會逐個字符地比較字符串,將"2"放在"12"之后。

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM