Je ne parviens pas à comprendre comment ignorer n lignes dans un fichier csv, tout en conservant l'en-tête qui correspond à la ligne 1.
Ce que je veux faire, c'est itérer mais garder l'en-tête de la première ligne. skiprows
fait de l'en-tête la première ligne après les lignes ignorées. Quelle est la meilleure façon de faire cela?
data = pd.read_csv('test.csv', sep='|', header=0, skiprows=10, nrows=10)
Vous pouvez passer une liste de numéros de lignes à skiprows
au lieu d'un entier.
En donnant à la fonction l'entier 10, vous ne faites que sauter les 10 premières lignes.
Pour conserver la première ligne 0 (en-tête) et ignorer tout le reste jusqu'à la ligne 10, vous pouvez écrire:
pd.read_csv('test.csv', sep='|', skiprows=range(1, 10))
read_csv
Les deux principaux moyens de contrôler les lignes utilisées par read_csv
Sont les paramètres header
ou skiprows
.
Supposons que nous avons le fichier CSV suivant avec une colonne:
a
b
c
d
e
f
Dans chacun des exemples ci-dessous, ce fichier est f = io.StringIO("\n".join("abcdef"))
.
Lire toutes les lignes comme des valeurs (pas d'en-tête, par défaut des entiers)
>>> pd.read_csv(f, header=None)
0
0 a
1 b
2 c
3 d
4 e
5 f
Utilisez une ligne particulière comme en-tête (ignorez toutes les lignes précédentes):
>>> pd.read_csv(f, header=3)
d
0 e
1 f
Utilisez plusieurs lignes comme en-tête créant un MultiIndex (ignore toutes les lignes avant la dernière ligne d'en-tête spécifiée):
>>> pd.read_csv(f, header=[2, 4])
c
e
0 f
Ignorer N lignes du début du fichier (la première ligne non ignorée est l'en-tête):
>>> pd.read_csv(f, skiprows=3)
d
0 e
1 f
Ignorez une ou plusieurs lignes en donnant leur index (la première ligne non ignorée est l'en-tête):
>>> pd.read_csv(f, skiprows=[2, 4])
a
0 b
1 d
2 f
Excellentes réponses déjà .. Je ressens en quelque sorte le besoin d'ajouter la forme généralisée ici .. Considérez ce scénario: -
Supposons que votre fichier xls/csv comporte des lignes indésirables dans les deux premières lignes (ligne # 0,1). La rangée n ° 2 (3ème rangée) est l'en-tête réel et vous souhaitez charger 10 rangées à partir de la rangée n ° 50 (c'est-à-dire la 51e rangée). Voici l'extrait: -
pd.read_csv('test.csv', header=2, skiprows=range(3, 50), nrows=10)
Pour développer la réponse de @ AlexRiley, l'argument skiprows
prend une liste de nombres qui détermine les lignes à ignorer. Alors:
pd.read_csv('test.csv', sep='|', skiprows=range(1, 10))
est le même que:
pd.read_csv('test.csv', sep='|', skiprows=[1,2,3,4,5,6,7,8,9])
Le meilleur moyen d'ignorer des lignes spécifiques consiste à créer votre liste d'ignorations (manuellement ou avec une fonction telle que range
qui renvoie une liste d'entiers) et à la transmettre à skiprows
.
Si vous parcourez un long fichier csv, vous pouvez utiliser l'argument chunksize . Si, pour une raison quelconque, vous devez le parcourir manuellement, vous pouvez essayer ce qui suit tant que vous savez le nombre d'itérations à effectuer:
for i in range(num_iters):
pd.read_csv('test.csv', sep='|', header=0,
skiprows = range(i*10 + 1, (i+1)*10), nrows=10)
Si vous devez sauter/supprimer des lignes spécifiques, dites les 3 premières lignes (0,1,2), puis 2 autres lignes (4,5). Vous pouvez utiliser ce qui suit pour conserver la ligne d'en-tête:
df = pd.read_csv(file_in, delimiter='\t', skiprows=[0,1,2,4,5], encoding='utf-16', usecols=cols)