¿Cómo puedo filtrar qué líneas de un CSV se cargarán en la memoria usando pandas? Esta parece una opción en la que uno debería encontrar read_csv. ¿Me estoy perdiendo de algo?
Ejemplo: tenemos un CSV con una columna de marca de tiempo y nos gustaría cargar solo las líneas que tienen una marca de tiempo mayor que una constante dada.

chunk['filed']>constantpuedo Sandwich lugar entre los 2 valores constantes? Por ejemplo: constante1> fragmento ['campo']> constante2. ¿O puedo usar 'dentro del rango'?chunk[(chunk['field'] > constant2)&(chunk['field']<constant1)].loc?chunk.loc[chunk['field'] > constant].loc. No creo que.locexistiera en 2012, pero creo que en estos días el uso.loces un poco más explícito.No encontré una forma sencilla de hacerlo dentro del contexto de
read_csv. Sin embargo,read_csvdevuelve un DataFrame, que se puede filtrar seleccionando filas por vector booleanodf[bool_vec]:Esto es seleccionar todas las filas en df (asumiendo que df es cualquier DataFrame, como el resultado de una
read_csvllamada, que al menos contiene una columna de fecha y horatimestamp) para los cuales los valores en latimestampcolumna son mayores que el valor de targettime. Pregunta similar .fuente
Si el rango filtrado es contiguo (como suele ser con los filtros de tiempo (sello)), entonces la solución más rápida es codificar el rango de filas. Simplemente combine
skiprows=range(1, start_row)con losnrows=end_rowparámetros. Luego, la importación toma segundos, mientras que la solución aceptada tomaría minutos. Unos pocos experimentos con el inicialstart_rowno suponen un gran coste dado el ahorro en tiempos de importación. Observe que mantuvimos la fila de encabezado usandorange(1,..).fuente
Si está en Linux, puede usar grep.
fuente
Puede especificar el
nrowsparámetro.import pandas as pd df = pd.read_csv('file.csv', nrows=100)Este código funciona bien en la versión 0.20.3.
fuente