La comprensione delle liste è molto buona. Ma una sorta di "... Unisciti ..." sarebbe molto utile. Grazie. Quindi per esempio. Ho un Set A = {1,0}, un elenco B = [[1,1], [2,3]]. Mi piacerebbe trovare tutte le righe in B in cui il secondo colomu è uno dei valori in A. O qualche cosa più generale, ho 2 file CSV. Voglio scoprire tutte le righe in cui i valori di alcune colonm dei due file corrispondono. Proprio come una sorta di "join" di due file. Uno dei file è la dimensione GB. sqldf is "SQL select on R data frames."Esiste un modulo in Python che faccia qualcosa come "sqldf" per R?
risposta
Sono a conoscenza di una libreria di fare ciò che si chiede (ma mi guardò solo la documentazione sqldf
), ma niente di quello che hai chiesto richiede davvero una biblioteca, sono one-liner in pitone (e si potrebbe ovviamente astratto la funzionalità creando una funzione piuttosto che una semplice comprensione di lista ...)
Set A = {1,0}, un elenco B = [[1,1], [2,3]] . Mi piacerebbe trovare tutte le righe in B, dove la seconda colonna è uno dei valori in A.
>>> a = set([1, 0])
>>> b = [[1,1],[2,3]]
>>> [l for l in b if l[1] in a]
[[1, 1]]
Ho 2 file CSV. Voglio scoprire tutte le righe in cui i valori di alcune colonne dei due file corrispondono.
>>> f1 = [[1, 2, 3], [4, 5, 6]]
>>> f2 = [[0, 2, 8], [7, 7, 7]]
>>> [tuple_ for tuple_ in zip(f1, f2) if tuple_[0][1] == tuple_[1][1]]
[([1, 2, 3], [0, 2, 8])]
EDIT: Se l'utilizzo della memoria è un problema che si dovrebbe usare generatori invece di liste. Per esempio:
>>> zip(f1, f2)
[([1, 2, 3], [0, 2, 8]), ([4, 5, 6], [7, 7, 7])]
ma utilizzando generatori:
>>> import itertools as it
>>> gen = it.izip(f1, f2)
>>> gen
<itertools.izip object at 0x1f24ab8>
>>> next(gen)
([1, 2, 3], [0, 2, 8])
>>> next(gen)
([4, 5, 6], [7, 7, 7])
E per l'origine dati:
>>> [line for line in f1]
[[1, 2, 3], [4, 5, 6]]
tradurre come generatore come:
>>> gen = (line for line in f1)
>>> gen
<generator object <genexpr> at 0x1f159b0>
>>> next(gen)
[1, 2, 3]
>>> next(gen)
[4, 5, 6]
Grazie a @mac. Hai ragione, la comprensione delle liste è altrettanto potente di SQL, se non hai a che fare con i file di grandi dimensioni che non possono essere letti in memoria una sola volta. Sarò molto felice se faccio lo stesso con grandi file CSV. – gstar2002
@ gstar2002 - Non c'è nulla che ti impedisca di usare questa sintassi con i generatori anziché con gli elenchi. Vedi le modifiche. – mac
grazie, funziona per izip. Ma per cose come ([l1, l2] per l1 in f1 per l2 in f2), non funziona. Ho solo la prima riga di f1 combinata con tutte le linee da f2. Ma mi piacerebbe avere tutte le combinazioni. – gstar2002
Prima di poter fare la funzionalità di sqldf è necessaria la funzione razionalità di 'df', cioè i dataframes. Python ha una versione coccolone: panda:
http://pandas.sourceforge.net/
Forse la sezione sulla giunzione e fusione contribuirà a:
http://pandas.sourceforge.net/merging.html
vi consiglio di iniziare con qualcosa di più piccolo dei file gigabyte però!
È possibile utilizzare pandasql, che consente l'esecuzione di query in stile SQL di DataFrame di panda. È molto simile a sqldf.
https://github.com/yhat/pandasql/
(piena di responsabilità, l'ho scritto)
EDIT: post sul blog documentano alcune delle caratteristiche che si trovano qui: http://blog.yhathq.com/posts/pandasql-sql-for-pandas-dataframes.html
- 1. Esiste qualcosa come l'esportazione di Python?
- 2. Esiste un modulo per Python che esegue il riconoscimento facciale?
- 3. Come posso passare la variabile R in sqldf?
- 4. Chiama le funzioni R dalle query sqldf
- 5. Come posso mantenere una data formattata in R usando sqldf?
- 6. Esiste qualcosa come Codecademy per Java
- 7. Esiste qualcosa come Incanter per Haskell?
- 8. Esiste un modulo Python per convertire RTF in testo normale?
- 9. Impossibile utilizzare rango() su funzioni in R utilizzando sqldf
- 10. Esiste un modulo websocket Python 3 per server?
- 11. Esiste un compilatore R?
- 12. Esiste qualcosa come CHESS per Java?
- 13. Esiste qualcosa come NSPredicateEditor per iOS?
- 14. Esiste per bash qualcosa come perls __DATA__?
- 15. Esiste qualcosa come WMI per Linux?
- 16. Esiste qualcosa come jQuery.toggle (booleano)?
- 17. Esiste un Python equivalente alla funzione smooth.spline in R
- 18. Esiste qualcosa come XML 2.0?
- 19. Python: Qualcosa come `map` che funziona sui thread
- 20. Importare un modulo in Python solo se non esiste già
- 21. Come nascondere qualcosa che è già stato stampato in Python
- 22. Esiste qualcosa come una classe che può essere implementata?
- 23. Esiste qualcosa come Eclipse Perspective in Visual Studio?
- 24. Esiste una libreria per urllib2 per python che possiamo scaricare?
- 25. Esiste un 'uomo' per Python?
- 26. Esiste un metodo più efficiente rispetto ai cicli while per qualcosa che richiede il controllo condizionale?
- 27. modo pythonic per verificare se qualcosa esiste?
- 28. Esiste un sendKey per Mac in Python?
- 29. Come ripetere qualcosa su eccezione in python?
- 30. C'è un modo per fare in modo che emacs faccia ricerche "fuzzy"?
Si otterrebbe più risposte/meglio se si dispone di una breve riassunto di cosa 'sqldf' fa per gli utenti non-R. Esattamente quali parti della sua funzionalità vuoi? –
Concordato ... Inoltre, qualche codice o almeno qualche pseudo codice per spiegare cosa si sta tentando di fare sarebbe utile. –