Bonjour,
Je débute tout juste en python et je souhaitais stocker le contenu d'un csv dans un matrice.
Après m'être démené avec la librairie csv, j'ai cru comprendre qu'il serait mieux d'utiliser numpy.
J'utilise donc le code suivant :
1 2
| import numpy as np
matrix = np.loadtxt('matrix.csv',dtype = str, delimiter = ',',unpack=False) |
Jusque là pas de souci, j'obtiens bien une matrice (du moins un tableau de données).
Cependant mon csv comporte 3 champs par ligne dont le dernier est un entier, et pas un string.
J'ai donc vu qu'il fallait plutôt utiliser quelque chose comme ça :
matrix = np.loadtxt('matrix.csv',dtype = ("U25, U25, i4"), delimiter = ',',unpack=False)
D'une part cela m'embête un peu car j'aurais préfère ne pas avoir à préciser la taille des chaînes de caractères mais je n'ai pas réussi à spécifier plusieurs types avec les notations int, str, etc. mais soit.
D'autre part, voilà maintenant que mon objet matrix n'est plus une matrice mais un array unidimensionnel ! Je trouve cela assez contre-intuitif puisque je précise justement plusieurs types, qui laissent donc penser qu'il y a bien plusieurs "colonnes" dans mon fichier !
je sais bien que je pourrai simplement utiliser le premier code que j'ai cité et convertir ensuite la colonne correspondante en int, mais j'aurais souhaité comprendre pourquoi loadtxt agissait comme ça lorsque je faisais varier le paramètre dtype, et surtout s'il était possible d'obtenir directement ma matrice avec les bons types pour chaque champ en une seule instruction.
Je vous remercie d'avance pour votre aide !
Edit pour en dessous :
Merci pour ta réponse.
Le fichier CSV correspond à une matrice des distances qui ressemble à ça :
A1-51-A , A1-21-A , 4794
A1-51-A , A1-21-B , 4894
A1-51-A , A1-21-C , 4994
A1-51-A , A1-19-A , 5094
A1-51-A , A1-19-B , 5194
A1-51-A , A1-19-C , 5294
A1-51-A , A1-17-A , 5394
A1-51-A , A1-17-B , 5494
A1-51-A , A1-17-C , 5594
je souhaiterais donc une matrice de 3 colonnes avec 2 string et un int.
Pour le code il n'y a rien de plus que ce que j'ai mis concernant ce que je veux faire.
Pour la librairie csv j'arrivais à parcourir la matrice en l'utilisant (avec un reader), mais pas vraiment à stocker. Et j'avais l'impression qu'elle considérait mon fichier encore une fois comme un array unidimensionnel avec chaque ligne étant une case, et non pas comme une matrice.
Partager