32 votes

Lecture d'un fichier CSV dans un tableau numpy, première ligne en tant que chaînes de caractères, le reste en tant que float.

J'ai des données stockées dans un CSV dont la première ligne est constituée de chaînes de caractères (noms de colonnes) et les autres lignes de chiffres. Comment puis-je stocker ces données dans un tableau numpy ? Tout ce que je trouve, c'est comment définir le type de données pour les colonnes mais pas pour les lignes.

Pour l'instant, je ne fais que sauter les en-têtes pour faire les calculs, mais je dois avoir les en-têtes dans la version finale. Mais si je laisse les en-têtes, tout le tableau devient une chaîne et les calculs échouent.

C'est ce que j'ai :

 data = np.genfromtxt(path_to_csv, dtype=None, delimiter=',', skip_header=1)

51voto

Pierre GM Points 7792

Vous pouvez conserver les noms des colonnes si vous utilisez l'option names=True dans la fonction np.genfromtxt

 data = np.genfromtxt(path_to_csv, dtype=float, delimiter=',', names=True) 

Veuillez noter que le dtype=float qui convertira vos données en flottant. C'est plus efficace que d'utiliser dtype=None qui demande np.genfromtxt pour deviner le type de données à votre place.

La sortie sera un tableau structuré, où vous pouvez accéder aux colonnes individuelles par leur nom. Les noms seront pris à partir de votre première ligne. Certaines modifications peuvent être apportées, les espaces dans le nom d'une colonne seront changés en _ par exemple. Le site documentation devrait couvrir la plupart des questions que vous pourriez avoir.

13voto

user545424 Points 3707

Je ne suis pas sûr de ce que vous voulez dire quand vous dites que vous avez besoin des en-têtes dans la version finale, mais vous pouvez générer un tableau structuré où les colonnes sont accessibles par des chaînes de caractères comme ceci :

data = np.genfromtxt(path_to_csv, dtype=None, delimiter=',', names=True)

et ensuite accéder aux colonnes avec data['col1_name'] , data['col2_name'] etc.

3voto

kindall Points 60645

L'idée générale d'un tableau numpy est que tous les éléments sont du même type. Vous pouvez lire les en-têtes dans une liste Python et les gérer séparément des nombres. Vous pouvez également créer un tableau structuré (un tableau d'enregistrements) et dans ce cas, vous pouvez utiliser les en-têtes pour nommer les champs dans les enregistrements. Les stocker dans le tableau serait redondant dans ce cas.

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