134 votes

Comment lire les premières lignes d'un dataframe pandas ?

Existe-t-il un moyen intégré d'utiliser read_csv pour ne lire que le premier n lignes d'un fichier sans connaître à l'avance la longueur des lignes ? J'ai un grand fichier qui prend beaucoup de temps à lire, et occasionnellement je veux seulement utiliser les premières, disons, 20 lignes pour en avoir un échantillon (et je préfère ne pas charger le tout et prendre la tête du fichier).

Si je connaissais le nombre total de lignes, je pourrais faire quelque chose du genre footer_lines = total_lines - n et le transmettre à la skipfooter mot-clé arg. Ma solution actuelle consiste à saisir manuellement le premier n avec python et le StringIO à 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 mal, mais existe-t-il un moyen plus concis, plus "pandasique" ( ?) de le faire avec des mots-clés ou autre ?

235voto

DSM Points 71975

Je pense que vous pouvez utiliser le nrows paramètre. À partir de les docs :

nrows : int, default None

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

ce qui semble fonctionner. J'utilise un des grands 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

7voto

Wissam Points 11

J'utiliserais l'argument 'skiprows' dans read_csv, par exemple :

df = pd.read_csv(filename, skiprows=range(2, 20000), nrows=10000)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X