Manera de leer las primeras líneas para el marco de datos de pandas


100

¿Existe una forma incorporada de usar read_csvpara leer solo las primeras nlíneas de un archivo sin saber la longitud de las líneas de antemano? Tengo un archivo grande que tarda mucho en leerse, y ocasionalmente solo quiero usar las primeras, digamos, 20 líneas para obtener una muestra (y prefiero no cargarlo completo y tomar la cabeza).

Si supiera el número total de líneas, podría hacer algo como footer_lines = total_lines - ny pasar esto a la skipfooterpalabra clave arg. Mi solución actual es tomar manualmente las primeras nlíneas con python y StringIO en pandas:

import pandas as pd
from StringIO import StringIO

n = 20
with open('big_file.csv', 'r') as f:
    head = ''.join(f.readlines(n))

df = pd.read_csv(StringIO(head))

No es tan malo, pero ¿hay una forma más concisa, 'pandasica' (?) De hacerlo con palabras clave o algo así?


1
Para ver cómo cargar las últimas N líneas
consulte

7
¿Quiso decir "pandastic"? :)
1 ''

Respuestas:


182

Creo que puedes usar el nrowsparámetro. De los documentos :

nrows : int, default None

    Number of rows of file to read. Useful for reading pieces of large files

que parece funcionar. Usando uno de los archivos de prueba grandes estándar (988504479 bytes, 5344499 líneas):

In [1]: import pandas as pd

In [2]: time z = pd.read_csv("P00000001-ALL.csv", nrows=20)
CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
Wall time: 0.00 s

In [3]: len(z)
Out[3]: 20

In [4]: time z = pd.read_csv("P00000001-ALL.csv")
CPU times: user 27.63 s, sys: 1.92 s, total: 29.55 s
Wall time: 30.23 s

Impresionante, debe haber pasado por alto ese parámetro. Gracias.
beardc

3
skiprows=Nonetambién es un parámetro útil para recordar
Nitin

¿Cuál es la mejor manera de cargar las últimas n filas? Básicamente lo que hace tail (), pero necesito usarlo mientras carga el csv. ¡Gracias por adelantado!
Danail Petrov
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.