Skip to content

Dans NumPy, vous pouvez utiliser 𝐧‌𝐩‌.𝐥‌𝐨‌𝐚‌𝐝‌𝐭‌𝐱‌𝐭‌() ou 𝐧‌𝐩‌.𝐠‌𝐞‌𝐧‌𝐟‌𝐫‌𝐨‌𝐦‌𝐭‌𝐱‌𝐭‌() pour lire un fichier CSV sous forme de tableau ( 𝐧‌𝐝‌𝐚‌𝐫‌𝐫‌𝐚‌𝐲‌ ), et 𝐧‌𝐩‌.𝐬‌𝐚‌𝐯‌𝐞‌𝐭‌𝐱‌𝐭‌() pour écrire un 𝐧‌𝐝‌𝐚‌𝐫‌𝐫‌𝐚‌𝐲‌ sous forme de fichier CSV.

Pour plus de clarté, bien que le titre et les en-têtes mentionnent spécifiquement CSV, cette fonctionnalité ne se limite pas aux valeurs séparées par des virgules ; elle s’étend également à tous les fichiers texte séparés par des délimiteurs comme TSV (valeurs séparées par des tabulations).

Comme nous le verrons plus loin, pandas est plus pratique pour lire et écrire des fichiers contenant des en-têtes ou comportant à la fois des colonnes numériques et des chaînes.

De plus, dans les cas où l’interopérabilité avec d’autres applications n’est pas nécessaire, l’enregistrement au format binaire propriétaire de NumPy ( 𝐧‌𝐩‌𝐲‌ et 𝐧‌𝐩‌𝐳‌ ) est un choix pratique. Pour plus d’informations, reportez-vous à l’article suivant.

La version de NumPy utilisée dans cet article est la suivante. Notez que les fonctionnalités peuvent varier selon les versions.

import numpy as np print(np.__version__) # 1.26.1 

Notez que tous les arguments ne sont pas traités dans cet article, veuillez donc vous référer à la documentation officielle pour plus de détails.

Lire les fichiers CSV sous forme de tableaux : 𝐧‌𝐩‌.𝐥‌𝐨‌𝐚‌𝐝‌𝐭‌𝐱‌𝐭‌()

Utilisation de la base

Pour lire n’importe quel fichier texte séparé par un caractère arbitraire sous forme de tableau NumPy ( 𝐧‌𝐝‌𝐚‌𝐫‌𝐫‌𝐚‌𝐲‌ ), utilisez 𝐧‌𝐩‌.𝐥‌𝐨‌𝐚‌𝐝‌𝐭‌𝐱‌𝐭‌() .

Considérez le fichier suivant séparé par des espaces. À des fins d’explication, le contenu du fichier est affiché à l’aide de 𝐨‌𝐩‌𝐞‌𝐧‌() . Consultez l’article suivant pour en savoir plus sur 𝐨‌𝐩‌𝐞‌𝐧‌() .

with open('data/src/sample.txt') as f: print(f.read()) # 11 12 13 14 # 21 22 23 24 # 31 32 33 34 

Spécifiez le chemin d’accès au fichier comme premier argument. Par défaut, le type de données ( 𝐝‌𝐭‌𝐲‌𝐩‌𝐞‌ ) est 𝐟‌𝐥‌𝐨‌𝐚‌𝐭‌ , dont la taille en bits dépend de l’environnement.

a = np.loadtxt('data/src/sample.txt') print(a) # [[11. 12. 13. 14.] # [21. 22. 23. 24.] # [31. 32. 33. 34.]] print(type(a)) # <class 'numpy.ndarray'> print(a.dtype) # float64 

Vous pouvez définir soit une chaîne de chemin, soit un objet 𝐩‌𝐚‌𝐭‌𝐡‌𝐥‌𝐢‌𝐛‌.P𝐚‌𝐭‌𝐡‌ comme premier argument.

Spécifiez le délimiteur : 𝐝‌𝐞‌𝐥‌𝐢‌𝐦‌𝐢‌𝐭‌𝐞‌𝐫‌

Pour lire un fichier séparé par des virgules (fichier CSV), spécifiez une virgule ( ‘,’ ) pour l’argument 𝐝‌𝐞‌𝐥‌𝐢‌𝐦‌𝐢‌𝐭‌𝐞‌𝐫‌ .

with open('data/src/sample.csv') as f: print(f.read()) # 11,12,13,14 # 21,22,23,24 # 31,32,33,34 print(np.loadtxt('data/src/sample.csv', delimiter=',')) # [[11. 12. 13. 14.] # [21. 22. 23. 24.] # [31. 32. 33. 34.]] 

La valeur par défaut de 𝐝‌𝐞‌𝐥‌𝐢‌𝐦‌𝐢‌𝐭‌𝐞‌𝐫‌ est un espace ( ‘ ‘ ), donc l’omettre entraînera une erreur avec les fichiers CSV.

# print(np.loadtxt('data/src/sample.csv')) # ValueError: could not convert string '11,12,13,14' to float64 at row 0, column 1. 

Pour un fichier séparé par des tabulations (fichier TSV), défini 𝐝‌𝐞‌𝐥‌𝐢‌𝐦‌𝐢‌𝐭‌𝐞‌𝐫‌=’\𝐭‌’ .

Spécifiez le type de données : 𝐝‌𝐭‌𝐲‌𝐩‌𝐞‌

Par défaut, le type de données ( 𝐝‌𝐭‌𝐲‌𝐩‌𝐞‌ ) est 𝐟‌𝐥‌𝐨‌𝐚‌𝐭‌ , dont la taille en bits dépend de l’environnement. N’importe quel type de données peut être spécifié avec l’argument 𝐝‌𝐭‌𝐲‌𝐩‌𝐞‌ .

a = np.loadtxt('data/src/sample.csv', delimiter=',', dtype='int64') print(a) # [[11 12 13 14] # [21 22 23 24] # [31 32 33 34]] print(a.dtype) # int64 

Spécifiez les lignes et les colonnes à lire : 𝐬‌𝐤‌𝐢‌𝐩‌𝐫‌𝐨‌𝐰‌𝐬‌ , 𝐦‌𝐚‌𝐱‌_𝐫‌𝐨‌𝐰‌𝐬‌ , 𝐮‌𝐬‌𝐞‌𝐜‌𝐨‌𝐥‌𝐬‌

Si le fichier contient des données indésirables, utilisez les arguments 𝐬‌𝐤‌𝐢‌𝐩‌𝐫‌𝐨‌𝐰‌𝐬‌ , Pour ralentir les lignes et les colonnes à lire .

  • 𝐬𝐨𝐮𝐬 𝐩𝐫𝐨𝐮𝐭𝐞𝐧𝐭 𝐬𝐨𝐮𝐬 …
    • Spécifiez le nombre de lignes à ignorer depuis le début sous forme de valeur entière
    • Les lignes vides et les lignes de commentaires sont également comptées
  • 𝐦‌𝐚‌𝐱‌_𝐫‌𝐨‌𝐰‌𝐬‌
    • Spécifiez le nombre de lignes à lire après 𝐬‌𝐤‌𝐢‌𝐩‌𝐫‌𝐨‌𝐰‌𝐬‌ sous forme de valeur entière
    • Les lignes vides et les lignes de commentaires ne sont pas comptées (à partir de la version 1.23 de NumPy)
  • 𝐮𝐞𝐬𝐭 𝐜𝐨𝐧𝐭𝐞𝐧𝐭 𝐥𝐞 𝐩𝐫𝐨𝐮𝐬 …
    • Spécifiez les index (de base 0) des colonnes à lire sous forme de liste ou d’un autre objet de séquence
    • Si une seule colonne doit être lue, elle peut également être spécifiée sous forme de valeur entière

Par défaut, les lignes commençant par # sont ignorées en tant que commentaires. Vous pouvez définir les caractères à traiter comme indicateurs de commentaire dans l’argument 𝐜‌𝐨‌𝐦‌𝐦‌𝐞‌𝐧‌𝐭‌𝐬‌ , soit sous la forme d’une chaîne unique, soit sous la forme d’une liste de chaînes.

En spécifiant ces arguments, vous pouvez lire uniquement les données requises dans les fichiers.

with open('data/src/sample_header_index.csv') as f: print(f.read()) # ,a,b,c,d # ONE,11,12,13,14 # TWO,21,22,23,24 # THREE,31,32,33,34 a = np.loadtxt('data/src/sample_header_index.csv', delimiter=',', dtype='int64', skiprows=1, usecols=[1, 2, 3, 4]) print(a) # [[11 12 13 14] # [21 22 23 24] # [31 32 33 34]] 

Comme nous le verrons plus tard, ces fichiers sont plus facilement gérés à l’aide de pandas.

Lire des fichiers CSV complexes sous forme de tableaux :

𝐧‌𝐩‌.𝐠‌𝐞‌𝐧‌𝐟‌𝐫‌𝐨‌𝐦‌𝐭‌𝐱‌𝐭‌() vous permet de lire des fichiers CSV complexes avec des valeurs manquantes ou divers types de données.

Cependant, pour les fichiers contenant plusieurs types de données, pandas est souvent plus pratique ; c’est pourquoi cet article n’offre qu’une brève introduction. Pour plus de détails, reportez-vous à la documentation officielle.

Utilisation de la base

L’utilisation de base de 𝐧‌𝐩‌.𝐠‌𝐞‌𝐧‌𝐟‌𝐫‌𝐨‌𝐦‌𝐭‌𝐱‌𝐭‌() est similaire à 𝐧‌𝐩‌.𝐥‌𝐨‌𝐚‌𝐝‌𝐭‌𝐱‌𝐭‌() .

Spécifiez le chemin d’accès au fichier comme premier argument, le délimiteur comme argument 𝐝‌𝐞‌𝐥‌𝐢‌𝐦‌𝐢‌𝐭‌𝐞‌𝐫‌ et le type de données comme argument 𝐝‌𝐭‌𝐲‌𝐩‌𝐞‌ . De plus, spécifiez les lignes et les colonnes à lire en utilisant des arguments tels que 𝐬‌𝐤‌𝐢‌𝐩‌_𝐡‌𝐞‌𝐚‌𝐝‌𝐞‌𝐫‌ (équivalent à 𝐬‌𝐤‌𝐢‌𝐩‌𝐫‌𝐨‌𝐰‌𝐬‌ dans 𝐧‌𝐩‌.𝐥‌𝐨‌𝐚‌𝐝‌𝐭‌𝐱‌𝐭‌() ), 𝐦‌𝐚‌𝐱‌_𝐫‌𝐨‌𝐰‌𝐬‌ et 𝐮‌𝐬‌𝐞‌𝐜‌𝐨‌𝐥‌𝐬‌ .

with open('data/src/sample_header_index.csv') as f: print(f.read()) # ,a,b,c,d # ONE,11,12,13,14 # TWO,21,22,23,24 # THREE,31,32,33,34 a = np.genfromtxt('data/src/sample_header_index.csv', delimiter=',', dtype='int64', skip_header=1, usecols=[1, 2, 3, 4]) print(a) # [[11 12 13 14] # [21 22 23 24] # [31 32 33 34]] 

Gérer les valeurs manquantes

Considérez un fichier avec des valeurs manquantes, ce qui provoquerait une erreur s’il était lu à l’aide de 𝐧‌𝐩‌.𝐥‌𝐨‌𝐚‌𝐝‌𝐭‌𝐱‌𝐭‌() .

with open('data/src/sample_nan.csv') as f: print(f.read()) # 11,12,,14 # 21,,,24 # 31,32,33,34 # a = np.loadtxt('data/src/sample_nan.csv', delimiter=',') # ValueError: could not convert string '' to float64 at row 0, column 3. 

En utilisant 𝐧‌𝐩‌.𝐠‌𝐞‌𝐧‌𝐟‌𝐫‌𝐨‌𝐦‌𝐭‌𝐱‌𝐭‌() , les valeurs manquantes sont lues comme 𝐧‌𝐩‌.𝐧‌𝐚‌𝐧‌ .

a = np.genfromtxt('data/src/sample_nan.csv', delimiter=',') print(a) # [[11. 12. nan 14.] # [21. nan nan 24.] # [31. 32. 33. 34.]] 

L’argument 𝐟‌𝐢‌𝐥‌𝐥‌𝐢‌𝐧‌𝐠‌_𝐯‌𝐚‌𝐥‌𝐮‌𝐞‌𝐬‌ permet de définir une valeur pour compléter les valeurs manquantes.

a = np.genfromtxt('data/src/sample_nan.csv', delimiter=',', filling_values=0) print(a) # [[11. 12. 0. 14.] # [21. 0. 0. 24.] # [31. 32. 33. 34.]] 

Pour connaître les méthodes permettant de remplacer les valeurs manquantes par la moyenne des valeurs non manquantes, ainsi que d’autres techniques de gestion des données manquantes, reportez-vous aux articles suivants.

Gérer différents types de données

Considérez le fichier suivant avec différents types de données (chaînes et nombres) dans chaque colonne.

with open('data/src/sample_pandas_normal.csv') as f: print(f.read()) # name,age,state,point # Alice,24,NY,64 # Bob,42,CA,92 # Charlie,18,CA,70 # Dave,68,TX,70 # Ellen,24,CA,88 # Frank,30,NY,57 

Bien que cela ne soit pas mentionné précédemment, 𝐧‌𝐩‌.𝐥‌𝐨‌𝐚‌𝐝‌𝐭‌𝐱‌𝐭‌() peut également lire ces fichiers sous forme de tableaux structurés si une fonction appropriée est spécifiée.

a = np.loadtxt('data/src/sample_pandas_normal.csv', delimiter=',', skiprows=1, dtype={'names': ('name', 'age', 'state', 'point'), 'formats': ('<U7', '<i8', '<U2', '<i8')}) print(a) # [('Alice', 24, 'NY', 64) ('Bob', 42, 'CA', 92) ('Charlie', 18, 'CA', 70) # ('Dave', 68, 'TX', 70) ('Ellen', 24, 'CA', 88) ('Frank', 30, 'NY', 57)] print(type(a)) # <class 'numpy.ndarray'> print(a.dtype) # [('name', '<U7'), ('age', '<i8'), ('state', '<U2'), ('point', '<i8')] 

Dans 𝐧‌𝐩‌.𝐠‌𝐞‌𝐧‌𝐟‌𝐫‌𝐨‌𝐦‌𝐭‌𝐱‌𝐭‌() , définissant l’argument 𝐧‌𝐚‌𝐦‌𝐞‌𝐬‌ sur T𝐫‌𝐮‌𝐞‌ et l’argument 𝐝‌𝐭‌𝐲‌𝐩‌𝐞‌ sur N𝐨‌𝐧‌𝐞‌ lit le fichier comme un tableau structuré avec des noms de champs extraits de la première ligne et des types déterminés automatiquement pour chaque colonne.

a = np.genfromtxt('data/src/sample_pandas_normal.csv', delimiter=',', names=True, dtype=None, encoding='utf-8') print(a) # [('Alice', 24, 'NY', 64) ('Bob', 42, 'CA', 92) ('Charlie', 18, 'CA', 70) # ('Dave', 68, 'TX', 70) ('Ellen', 24, 'CA', 88) ('Frank', 30, 'NY', 57)] print(type(a)) # <class 'numpy.ndarray'> print(a.dtype) # [('name', '<U7'), ('age', '<i8'), ('state', '<U2'), ('point', '<i8')] 

Pour plus de détails sur les tableaux structurés, reportez-vous à la documentation officielle.

Encore une fois, la gestion de tels fichiers est plus facile avec pandas.

Écrire des tableaux dans des fichiers CSV : 𝐧‌𝐩‌.𝐬‌𝐚‌𝐯‌𝐞‌𝐭‌𝐱‌𝐭‌()

Pour enregistrer un tableau NumPy ( 𝐧‌𝐝‌𝐚‌𝐫‌𝐫‌𝐚‌𝐲‌ ) sous forme de fichier texte séparé par une chaîne arbitraire, utilisez 𝐧‌𝐩‌.𝐬‌𝐚‌𝐯‌𝐞‌𝐭‌𝐱‌𝐭‌() .

Considérez ce qui suit 𝐧‌𝐝‌𝐚‌𝐫‌𝐫‌𝐚‌𝐲‌ .

a = np.arange(6).reshape(2, 3) print(a) # [[0 1 2] # [3 4 5]] 

Utilisation de la base

Spécifiez le chemin du fichier comme premier argument et le chemin d’accès d’origine comme deuxième argument.

np.savetxt('data/temp/np_savetxt.txt', a) 

Un fichier avec le contenu suivant sera créé.

with open('data/temp/np_savetxt.txt') as f: print(f.read()) # 0.000000000000000000e+00 1.000000000000000000e+00 2.000000000000000000e+00 # 3.000000000000000000e+00 4.000000000000000000e+00 5.000000000000000000e+00 

Spécifiez le format : 𝐟‌𝐦‌𝐭‌

L’argument 𝐟‌𝐦‌𝐭‌ vous permet de préciser n’importe quel format.

Il est possible de préciser le nombre de décimales. Cependant, sachez que si les valeurs sont arrondies lors de l’enregistrement sous forme de texte, elles ne peuvent pas être reconverties à leur précision d’origine.

Le format par défaut est « %.18𝐞‌ » , qui utilise une notation scientifique à 18 décimales, comme illustré dans l’exemple ci-dessus. Dans cette notation, les nombres qui suivent le . représente les décimales, tandis que 𝐞‌ signifie la notation scientifique.

np.savetxt('data/temp/np_savetxt_5e.txt', a, fmt='%.5e') with open('data/temp/np_savetxt_5e.txt') as f: print(f.read()) # 0.00000e+00 1.00000e+00 2.00000e+00 # 3.00000e+00 4.00000e+00 5.00000e+00 

Étant donné que la notation scientifique peut être lue directement par 𝐧‌𝐩‌.𝐥‌𝐨‌𝐚‌𝐝‌𝐭‌𝐱‌𝐭‌() , à moins que vous n’ayez une préférence spécifique, le format par défaut devrait convenir.

print(np.loadtxt('data/temp/np_savetxt.txt')) # [[0. 1. 2.] # [3. 4. 5.]] 

𝐟‌ est pour la notation à virgule fixe.

np.savetxt('data/temp/np_savetxt_5f.txt', a, fmt='%.5f') with open('data/temp/np_savetxt_5f.txt') as f: print(f.read()) # 0.00000 1.00000 2.00000 # 3.00000 4.00000 5.00000 

𝐝‌ est pour les entiers décimaux.

np.savetxt('data/temp/np_savetxt_d.txt', a, fmt='%d') with open('data/temp/np_savetxt_d.txt') as f: print(f.read()) # 0 1 2 # 3 4 5 

𝐱‌ correspond à la notation hexadécimale. Le remplissage par des zéros est également possible. Par exemple, 04 signifie un total de 4 chiffres, le reste étant rempli par 0. Pour plus de clarté, les valeurs sont multipliées par 10 avant d’être enregistrées dans l’exemple suivant.

print(a * 10) # [[ 0 10 20] # [30 40 50]] np.savetxt('data/temp/np_savetxt_x.txt', a * 10, fmt='%04x') with open('data/temp/np_savetxt_x.txt') as f: print(f.read()) # 0000 000a 0014 # 001e 0028 0032 

Étant donné que 𝐧‌𝐩‌.𝐥‌𝐨‌𝐚‌𝐝‌𝐭‌𝐱‌𝐭‌() ne peut pas lire directement la notation hexadécimale, il est conseillé d’éviter ce format lorsque vous prévoyez de réutiliser les données dans NumPy.

Pour plus de détails sur les spécifications de format, reportez-vous à la documentation officielle.

Spécifiez le délimiteur : 𝐝‌𝐞‌𝐥‌𝐢‌𝐦‌𝐢‌𝐭‌𝐞‌𝐫‌

Comme 𝐧‌𝐩‌.𝐥‌𝐨‌𝐚‌𝐝‌𝐭‌𝐱‌𝐭‌() et 𝐧‌𝐩‌.𝐠‌𝐞‌𝐧‌𝐟‌𝐫‌𝐨‌𝐦‌𝐭‌𝐱‌𝐭‌() , le délimiteur par défaut dans 𝐧‌𝐩‌.𝐬‌𝐚‌𝐯‌𝐞‌𝐭‌𝐱‌𝐭‌() est un espace ( ‘ ‘ ).

Vous pouvez préciser n’importe quel délimiteur à l’aide de l’argument 𝐝‌𝐞‌𝐥‌𝐢‌𝐦‌𝐢‌𝐭‌𝐞‌𝐫‌ . Pour enregistrer au format CSV (valeurs séparées par des virgules), utilisez 𝐝‌𝐞‌𝐥‌𝐢‌𝐦‌𝐢‌𝐭‌𝐞‌𝐫‌=’,’ , et pour TSV (valeurs séparées par des tabulations), utilisez 𝐝‌𝐞‌𝐥‌𝐢‌𝐦‌𝐢‌𝐭‌𝐞‌𝐫‌=’\𝐭‌’ .

np.savetxt('data/temp/np_savetxt.csv', a, delimiter=',', fmt='%d') with open('data/temp/np_savetxt.csv') as f: print(f.read()) # 0,1,2 # 3,4,5 

np.savetxt('data/temp/np_savetxt.tsv', a, delimiter='\t', fmt='%d') with open('data/temp/np_savetxt.tsv') as f: print(f.read()) # 0 1 2 # 3 4 5 

Seuls les tableaux 1D et 2D peuvent être générés

𝐧‌𝐩‌.𝐬‌𝐚‌𝐯‌𝐞‌𝐭‌𝐱‌𝐭‌() ne peut écrire que des tableaux unidimensionnels et bidimensionnels. Toute tentative d’écriture de tableaux avec des dimensions supérieures entraînera une erreur.

a_3d = np.arange(24).reshape(2, 3, 4) print(a_3d) # [[[ 0 1 2 3] # [ 4 5 6 7] # [ 8 9 10 11]] #  # [[12 13 14 15] # [16 17 18 19] # [20 21 22 23]]] # np.savetxt('data/temp/np_savetxt_3d.txt', a_3d) # ValueError: Expected 1D or 2D array, got 3D array instead 

Les tableaux de trois dimensions ou plus peuvent être convertis en deux dimensions ou moins à l’aide de 𝐟‌𝐥‌𝐚‌𝐭‌𝐭‌𝐞‌𝐧‌() ou 𝐫‌𝐞‌𝐬‌𝐡‌𝐚‌𝐩‌𝐞‌() avant d’enregistrer.

Cependant, pour les ramener à leur forme 𝐧‌𝐝‌𝐚‌𝐫‌𝐫‌𝐚‌𝐲‌ d’origine après le chargement avec 𝐥‌𝐨‌𝐚‌𝐝‌𝐭‌𝐱‌𝐭‌() , vous nécessiterez les remodeler à leur forme d’origine à l’aide de 𝐫‌𝐞‌𝐬‌𝐡‌𝐚‌𝐩‌𝐞‌() . Cela nécessite d’enregistrer séparément les informations de forme, ce qui n’est pas toujours pratique.

Alternativement, l’enregistrement des tableaux dans des fichiers binaires ( 𝐧‌𝐩‌𝐲‌ et 𝐧‌𝐩‌𝐳‌ ) préserve leur type de données et leur forme tels quels. Étant donné que les tableaux multidimensionnels à trois dimensions ou plus peuvent être enregistrés directement de cette manière, le choix de fichiers binaires plutôt que de fichiers texte peut être une option plus simple si le format texte n’est pas nécessaire.

Lire et écrire des fichiers CSV avec pandas

L’utilisation de pandas facilite la lecture et l’écriture de fichiers complexes. 𝐧‌𝐮‌𝐦‌𝐩‌𝐲‌.𝐧‌𝐝‌𝐚‌𝐫‌𝐫‌𝐚‌𝐲‌ et 𝐩‌𝐚‌𝐧‌𝐝‌𝐚‌𝐬‌.D𝐚‌𝐭‌𝐚‌F𝐫‌𝐚‌𝐦‌𝐞‌ peuvent être convertis l’un en l’autre.

Cet article présente quelques exemples. Pour plus de détails sur les paramètres d’arguments et d’autres informations, reportez-vous aux articles suivants.

Lire et écrire des fichiers CSV avec en-tête et index

Considérez le fichier CSV suivant.

import numpy as np import pandas as pd with open('data/src/sample_header_index.csv') as f: print(f.read()) # ,a,b,c,d # ONE,11,12,13,14 # TWO,21,22,23,24 # THREE,31,32,33,34 

Avec 𝐩‌𝐝‌.𝐫‌𝐞‌𝐚‌𝐝‌_𝐜‌𝐬‌𝐯‌() , par défaut, la première ligne est traitée comme l’en-tête et la colonne spécifiée par l’argument 𝐢‌𝐧‌𝐝‌𝐞‌𝐱‌_𝐜‌𝐨‌𝐥‌ est traité comme l’index.

df = pd.read_csv('data/src/sample_header_index.csv', index_col=0) print(df) # a b c d # ONE 11 12 13 14 # TWO 21 22 23 24 # THREE 31 32 33 34 

Pour convertir un D𝐚‌𝐭‌𝐚‌F𝐫‌𝐚‌𝐦‌𝐞‌ en 𝐧‌𝐝‌𝐚‌𝐫‌𝐫𝐚‌𝐲‌ , utilisez l’attribut .

a = df.values print(a) # [[11 12 13 14] # [21 22 23 24] # [31 32 33 34]] print(type(a)) # <class 'numpy.ndarray'> 

Pour enregistrer un 𝐧‌𝐝‌𝐚‌𝐫‌𝐫‌𝐚‌𝐲‌ avec un en-tête et un index, créé d’abord un D𝐚‌𝐭‌𝐚‌F𝐫‌𝐚‌𝐦‌𝐞‌ en spécifiant les arguments 𝐢‌𝐧‌𝐝‌𝐞‌𝐱‌ et 𝐜‌𝐨‌𝐥‌𝐮‌𝐦‌𝐧‌𝐬‌ dans son constructeur, puis utilisez le Méthode 𝐭‌𝐨‌_𝐜‌𝐬‌𝐯‌() pour l’écrire.

a = np.arange(6).reshape(2, 3) print(a) # [[0 1 2] # [3 4 5]] df = pd.DataFrame(a, index=['ONE', 'TWO'], columns=['a', 'b', 'c']) print(df) # a b c # ONE 0 1 2 # TWO 3 4 5 df.to_csv('data/temp/sample_pd.csv') with open('data/temp/sample_pd.csv') as f: print(f.read()) # ,a,b,c # ONE,0,1,2 # TWO,3,4,5 

Gérer les valeurs manquantes

Considérez le fichier CSV suivant avec des données manquantes.

with open('data/src/sample_nan.csv') as f: print(f.read()) # 11,12,,14 # 21,,,24 # 31,32,33,34 

Avec 𝐩‌𝐝‌.𝐫‌𝐞‌𝐚‌𝐝‌_𝐜‌𝐬‌𝐯‌() , les valeurs manquantes sont traitées comme 𝐧‌𝐚‌𝐧‌ même sans paramètres aucun spécial. Comme mentionné ci-dessus, étant donné que la première ligne est traitée comme l’en-tête par défaut, s’il n’y a pas d’en-tête comme dans cet exemple, définir l’argument 𝐡‌𝐞‌𝐚‌𝐝‌𝐞‌𝐫‌ sur N𝐨‌𝐧‌𝐞‌ .

df = pd.read_csv('data/src/sample_nan.csv', header=None) print(df) # 0 1 2 3 # 0 11 12.0 NaN 14 # 1 21 NaN NaN 24 # 2 31 32.0 33.0 34 

Pour en savoir plus sur la gestion des valeurs manquantes dans pandas, reportez-vous aux articles suivants.

Gérer différents types de données

Considérez le fichier CSV suivant contenant à la fois des colonnes numériques et des colonnes de chaînes.

with open('data/src/sample_pandas_normal.csv') as f: print(f.read()) # name,age,state,point # Alice,24,NY,64 # Bob,42,CA,92 # Charlie,18,CA,70 # Dave,68,TX,70 # Ellen,24,CA,88 # Frank,30,NY,57 

Chaque colonne d’un DataFrame possède son propre type de données ( 𝐝‌𝐭‌𝐲‌𝐩‌𝐞‌ ). Dans 𝐩‌𝐝‌.𝐫‌𝐞‌𝐚‌𝐝‌_𝐜‌𝐬‌𝐯‌() , le type de données de chaque colonne est automatiquement déduit et défini par défaut.

df = pd.read_csv('data/src/sample_pandas_normal.csv') print(df) # name age state point # 0 Alice 24 NY 64 # 1 Bob 42 CA 92 # 2 Charlie 18 CA 70 # 3 Dave 68 TX 70 # 4 Ellen 24 CA 88 # 5 Frank 30 NY 57 print(df.dtypes) # name object # age int64 # state object # point int64 # dtype: object 

Pour en savoir plus sur les types de données dans pandas, reportez-vous à l’article suivant.

La méthode 𝐬‌𝐞‌𝐥‌𝐞‌𝐜‌𝐭‌_𝐝‌𝐭‌𝐲‌𝐩‌𝐞‌𝐬‌() de D𝐚‌𝐭‌𝐚‌F𝐫‌𝐚‌𝐦‌𝐞‌ peut être utilisé pour extraire des colonnes d’un type de données spécifique.

print(df.select_dtypes('int')) # age point # 0 24 64 # 1 42 92 # 2 18 70 # 3 68 70 # 4 24 88 # 5 30 57 

Vous pouvez extraire uniquement les colonnes numériques d’un fichier CSV contenant des données supplémentaires telles que des chaînes et les convertir en un fichier 𝐧‌𝐝‌𝐚‌𝐫‌𝐫‌𝐚‌𝐲‌ .

a = pd.read_csv('data/src/sample_pandas_normal.csv').select_dtypes('int').values print(a) # [[24 64] # [42 92] # [18 70] # [68 70] # [24 88] # [30 57]] print(type(a)) # <class 'numpy.ndarray'> print(a.dtype) # int64