python - tutorial - ordenar csv por columna
pandas python tutorial español pdf (3)
El lector actúa como un generador. En un archivo con algunos datos falsos:
>>> import sys, csv
>>> data = csv.reader(open(''data.csv''),delimiter='';'')
>>> data
<_csv.reader object at 0x1004a11a0>
>>> data.next()
[''a'', '' b'', '' c'']
>>> data.next()
[''x'', '' y'', '' z'']
>>> data.next()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
Usando operator.itemgetter como sugiere:
>>> data = csv.reader(open(''data.csv''),delimiter='';'')
>>> import operator
>>> sortedlist = sorted(data, key=operator.itemgetter(2), reverse=True)
>>> sortedlist
[[''x'', '' y'', '' z''], [''a'', '' b'', '' c'']]
Quiero ordenar una tabla CSV por fecha. Comenzó siendo una tarea simple:
import sys
import csv
reader = csv.reader(open("files.csv"), delimiter=";")
for id, path, title, date, author, platform, type, port in reader:
print date
Utilicé el módulo CSV de Python para leer en un archivo con esa estructura:
id;file;description;date;author;platform;type;port
- La fecha es ISO-8601, por lo tanto, puedo ordenarlo bastante fácilmente sin analizar: 2003-04-22, por ej.
- Quiero ordenar la fecha, las entradas más nuevas primero
- ¿Cómo hago para que este lector se convierta en una estructura de datos ordenable? Creo que con un poco de esfuerzo podría hacer un datelist: datelist + = date, split y sort. Sin embargo, tengo que volver a identificar la entrada completa en la tabla CSV. No es solo ordenar una lista de cosas.
- csv no parece tener una función de clasificación incorporada
La solución óptima sería tener un cliente CSV que maneje el archivo como una base de datos. No encontré nada de eso.
Espero que alguien sepa alguna buena magia de clasificación aquí;)
Gracias,
Marius
Para ordenar por MULTIPLE COLUMN (Ordenar por column_1
, y luego ordenar por column_2
)
with open(''unsorted.csv'',newline='''') as csvfile:
spamreader = csv.DictReader(csvfile, delimiter=";")
sortedlist = sorted(spamreader, key=lambda row:(row[''column_1''],row[''column_2'']), reverse=False)
with open(''sorted.csv'', ''w'') as f:
fieldnames = [''column_1'', ''column_2'', column_3]
writer = csv.DictWriter(f, fieldnames=fieldnames)
writer.writeheader()
for row in sortedlist:
writer.writerow(row)
import operator
sortedlist = sorted(reader, key=operator.itemgetter(3), reverse=True)
o usa lambda
sortedlist = sorted(reader, key=lambda row: row[3], reverse=True)