ti-enxame.com

Maneira de ler as primeiras linhas de pandas dataframe

Existe uma maneira interna de usar read_csv para ler somente as primeiras linhas n de um arquivo sem saber o comprimento das linhas antes do tempo? Eu tenho um arquivo grande que leva muito tempo para ler e, ocasionalmente, só quero usar o primeiro, digamos, 20 linhas para obter uma amostra dele (e prefiro não carregar a coisa completa e tirar a cabeça dela).

Se eu soubesse o número total de linhas, eu poderia fazer algo como footer_lines = total_lines - n e passar isso para o argumento de palavra-chave skipfooter. Minha solução atual é pegar manualmente as primeiras linhas n com python e StringIO para 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))

Não é tão ruim assim, mas existe uma maneira mais concisa, pandasica de fazer isso com palavras-chave ou algo assim?

73
beardc

Eu acho que você pode usar o parâmetro nrows. De os docs :

nrows : int, default None

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

o que parece funcionar. Usando um dos arquivos de teste grandes padrão (988504479 bytes, 5344499 linhas):

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
137
DSM