2015-06-01 2 views
1

Я пытаюсь сортировать файл csv в столбце 3. python сортирует csv, но для двух строк. Действительно запутаносортировка csv python 2.7

вот код, который я использую.

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'] 
+0

что ожидаемый результат? – ZdaR

+0

x [3] - 4-я колонка, вам нужно x [2] –

ответ

1

Вы сортировка строк, вам нужно использовать float(x[3])

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

Если вы хотите отсортировать по третьему колонку это х [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", если не отбрасывать в целое:

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

In [83]: int("2") < int("12") 
Out[83]: True 
Смежные вопросы