Las comprensiones de la lista son muy buenas. Pero algún tipo de "... Únete ..." sería muy útil. Gracias. Entonces, por ejemplo. Tengo un Set A = {1,0}, una lista B = [[1,1,1], [2,3]]. Me gustaría encontrar todas las filas en B donde el segundo colomu es uno de los valores en A. O algo más general, tengo 2 archivos CSV. Quiero averiguar todas las filas en las que coinciden los valores de algún colono de los dos archivos. Simplemente como una especie de 'combinación' de dos archivos. Uno de los archivos es tamaño GB. sqldf is "SQL select on R data frames."¿Hay algún módulo en Python que haga algo como "sqldf" para R?
Respuesta
estoy al tanto de una biblioteca haciendo lo que pide (pero sólo un vistazo a la documentación sqldf
), sin embargo nada de lo que pidieron realmente requiere una biblioteca, que son de una sola línea en Python (y que podría por supuesto, abstrae la funcionalidad creando una función en lugar de una simple lista de comprensión ...)
Set A = {1,0}, una lista B = [[1,1,1], [2,3]] . Me gustaría encontrar todas las filas de B, donde la segunda columna es uno de los valores en A.
>>> a = set([1, 0])
>>> b = [[1,1],[2,3]]
>>> [l for l in b if l[1] in a]
[[1, 1]]
Tengo 2 archivos CSV. Quiero averiguar todas las filas en las que coinciden los valores de alguna columna de los dos archivos.
>>> 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: Si uso de memoria es un problema que debe usar generadores en lugar de las listas. Por ejemplo:
>>> zip(f1, f2)
[([1, 2, 3], [0, 2, 8]), ([4, 5, 6], [7, 7, 7])]
pero utilizando generadores:
>>> 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])
Y para la fuente de datos:
>>> [line for line in f1]
[[1, 2, 3], [4, 5, 6]]
traducen como generador, como:
>>> gen = (line for line in f1)
>>> gen
<generator object <genexpr> at 0x1f159b0>
>>> next(gen)
[1, 2, 3]
>>> next(gen)
[4, 5, 6]
Gracias @mac. Tiene razón, la comprensión de la lista es similarmente poderosa como SQL, si no está tratando con los archivos grandes que no se pueden leer en la memoria una vez. Estaré muy feliz si hago lo mismo con los grandes archivos CSV. – gstar2002
@ gstar2002: no hay nada que le impida usar esta sintaxis con generadores en lugar de listas. Ver ediciones. – mac
gracias, funciona para izip. Pero para cosas como ([l1, l2] para l1 en f1 para l2 en f2), no funciona. Solo obtengo la primera línea de f1 combinada con todas las líneas de f2. Pero me gustaría tener todas las combinaciones. – gstar2002
Antes de que pueda hacer la funcionalidad de sqldf necesita la func tionalidad de 'df', es decir, marcos de datos. Python tiene una versión de peluche: pandas:
http://pandas.sourceforge.net/
Tal vez la sección de unión y fusión ayudará a:
http://pandas.sourceforge.net/merging.html
te recomiendo empezar con algo más pequeños que los archivos de gigabytes, aunque!
Puede usar pandasql, que permite consultas de estilo SQL de pandas DataFrames. Es muy similar a sqldf.
https://github.com/yhat/pandasql/
(aviso legal completo, que lo escribió)
EDIT: entrada de blog que documentan algunas de las características encontrar aquí: http://blog.yhathq.com/posts/pandasql-sql-for-pandas-dataframes.html
- 1. ¿Hay algo para Python que sea como readdability.js?
- 2. ¿Hay algún módulo que busque código superfluo?
- 3. ¿Hay algún módulo como LWP de Perl para Ruby?
- 4. ¿Hay algo así como Incanter para Haskell?
- 5. ¿Hay algo así como Codecademy para Java
- 6. En Python hay algo así como update que es para actualizar lo que se ordena ordenar?
- 7. ¿Hay algo así como bpython para Ruby?
- 8. ¿Hay algo así como "global ::" para VB.NET?
- 9. Python: algo así como `map` que funciona en los hilos
- 10. ¿Hay algún programa como LINQPad para Java?
- 11. ¿Hay algo como "+ =" en SASS?
- 12. ¿Hay algo como rubygems.org para bibliotecas scala
- 13. Algo así como boost :: multi_index para Python
- 14. ¿Hay algo como JRebel para .NET?
- 15. ¿Hay algo como .NET's T4 para Java?
- 16. ¿Hay algún otro módulo de pago que no sea Paypal?
- 17. ¿Hay algo como jquery para WPF/XAML?
- 18. ¿Hay algo como/proc para las ventanas
- 19. ¿Hay algo así como WMI para Linux?
- 20. ¿Hay algo así como AutoMapper para Scala?
- 21. ¿Hay algo como 'with' de Python en C#?
- 22. ¿Hay algún módulo estático JS de concatenación/minificación para Express.js?
- 23. ¿Hay algún módulo Perl que pueda automatizar ollydbg?
- 24. ¿Hay algún paquete para mapeo relacional de objetos en R?
- 25. ¿Hay un módulo para python que reconozca el rostro?
- 26. Tiene problemas para hacer que UIView sizeToFit haga algo significativo
- 27. ¿Hay algún buen buscador de objetos R?
- 28. módulo python para nslookup
- 29. ¿Hay algún paquete todo en uno como XAMPP para Django?
- 30. ¿Hay algo así como indicadores en Lua?
Se podría conseguir más mejores respuestas/si usted tiene una breve resumen de lo que 'sqldf' hace para los usuarios que no son R. ¿Qué partes de su funcionalidad quieres exactamente? –
De acuerdo ... También sería útil algún código o al menos algún pseudo código para explicar lo que estás tratando de hacer. –