web-dev-qa-db-fra.com

Manière de lire les premières lignes pour pandas dataframe

Existe-t-il une méthode intégrée pour utiliser read_csv ne lire que les premières n lignes d'un fichier sans connaître la longueur des lignes à l'avance? J'ai un fichier volumineux qui prend beaucoup de temps à lire et, de temps en temps, je ne souhaite utiliser que les 20 premières lignes, par exemple, pour en obtenir un échantillon (et préfère ne pas charger le fichier dans son intégralité pour en prendre la tête).

Si je connaissais le nombre total de lignes, je pourrais faire quelque chose comme footer_lines = total_lines - n et passez cela au skipfooter mot-clé arg. Ma solution actuelle est de saisir manuellement les premières n lignes avec python et StringIO pour les 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))

Ce n’est pas si grave, mais existe-t-il une façon plus concise de procéder avec des mots clés ou quelque chose de plus complexe?

78
beardc

Je pense que vous pouvez utiliser le paramètre nrows. De les docs :

nrows : int, default None

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

qui semble fonctionner. En utilisant l’un des gros fichiers de test standard (988504479 octets, 5344499 lignes):

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