Maneira de ler as primeiras linhas do dataframe do pandas

100

Existe uma maneira integrada de read_csvler apenas as primeiras nlinhas de um arquivo sem saber o comprimento das linhas com antecedência? Tenho um arquivo grande que leva muito tempo para ler e, ocasionalmente, só quero usar as primeiras, digamos, 20 linhas para obter uma amostra dele (e prefiro não carregar todo o conteúdo e tirar o cabeçalho).

Se eu soubesse o número total de linhas, poderia fazer algo como footer_lines = total_lines - ne passar para a skipfooterpalavra - chave arg. Minha solução atual é pegar manualmente as primeiras nlinhas 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 e 'pandasica' (?) De fazer isso com palavras-chave ou algo assim?

beardc
fonte
1
Para ver como carregar as últimas N linhas
verifique
7
Você quis dizer "pandastic"? :)
1 '' de

Respostas:

182

Acho que você pode usar o nrowsparâmetro. Dos documentos :

nrows : int, default None

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

que parece funcionar. Usando um dos grandes arquivos de teste 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
DSM
fonte
Incrível, devo ter perdido esse parâmetro. Obrigado.
beardc
3
skiprows=Nonetambém é um parâmetro útil para lembrar
Nitin
Qual é a melhor maneira de carregar as últimas n linhas? Basicamente, o que tail () faz, mas preciso usá-lo enquanto carrego o csv. Desde já, obrigado!
Danail Petrov