[Python] unire dati da due csv

Giovanni Marco Dall'Olio dalloliogm a gmail.com
Lun 18 Ott 2010 15:00:20 CEST


Il problema è che csv.reader ti ritorna un tipo di oggetto iterabile,
che non è l'ideale per fare i merge e lavorare con tabelle come vuoi
fare tu. Per me csv è una libreria da utilizzare a basso livello, ma
per lavorare con dati in forma di tabella ci sono almeno tre
alternative efficenti in python.

La prima passa per numpy e il pacchetto di librerie scientifiche di python.
Prova ad utilizzare numpy.recfromtxt, numpy.recfromcsv o
numpy.genfromtxt al posto di csv.reader, per leggere files csv.
>>> from numpy import genfromtxt
>>> coords = numpy.recfromtxt("invitations-coord.txt", names=True, delimiter=';', quotechar='|')
>>> coords['x'] # assumendo che in "invitations-coord.txt" vi sia una colonna chiamata "x"
[lista di tutti i valori della colonna x]

I recarray hanno diversi vantaggi, in termini di efficienza di memoria
e facilitá di utilizzo, rispetto a liste e dizionari di python (per
lavorare con file tabulari).

Da qui, se ho ben capito tu vuoi fare un JOIN come in SQL. Non so bene
quale sia la funzione esatta per farlo con numpy, ma ti puoi ispirare
alla funzione join_by qui:
- http://pyopengl.sourceforge.net/pydoc/numpy.lib.recfunctions.html

Un altro sistema è appoggiarsi ad un sistema SQL, ovvero caricare il
CSV con python, transformarlo in una tabella SQL (SQLite per esempio)
e fare il join tramite il DBMS... se hai grandi quantitá di dati,
questo sistema puó essere piuttosto efficente, perchè un qualsiasi
DBMS è in grado di effettuare operazioni di JOIN nativamente.

Adesso peró non ti saprei dire quale libreria utilizzare... ti
potresti ispirare da: http://www.daniweb.com/forums/thread297790.html

Purtroppo è da tempo che ho abbandonato l'idea di utilizzare python
per lavorare con dati di tipo tabulare, perchè è troppo scomodo.
Preferisco utilizzare R e la funzione merge integrata nativamente
(http://rss.acs.unt.edu/Rdoc/library/base/html/merge.html).
Tra l'altro, esiste anche Rpy2, una libreria per chiamare funzioni di
R da python, posto che tu abbia installato entrambi gli interpreti.



2010/10/16 Simone Gabbriellini <simone.gabbriellini a gmail.com>:
> Salve Lista,
>
> vorrei unire dati appartenenti a due csv.reader che leggo così:
>
> coordReader = csv.reader(open('invitations-coord.txt', 'rb'), delimiter=';', quotechar='|')
>
> nodesReader = csv.reader(open('invitations-nodes.txt', 'rb'), delimiter=';', quotechar='|')
>
> sulla base della prima colonna di ogni reader, che contiene il medesimo insieme di nomi univoci, vorrei creare un nuovo csv che incorpori i dati di coordReader e nodesReader.
>
> Grazie in anticipo per ogni aiuto/suggerimento!
>
> cordialmente,
> Simone
>
> _______________________________________________
> Python mailing list
> Python a lists.python.it
> http://lists.python.it/mailman/listinfo/python
>



-- 
Giovanni Dall'Olio, phd student
Department of Biologia Evolutiva at CEXS-UPF (Barcelona, Spain)

My blog on bioinformatics: http://bioinfoblog.it


Maggiori informazioni sulla lista Python