web-dev-qa-db-fra.com

Lire le fichier CSV dans le tableau numpy, la première ligne sous forme de chaînes, le reste sous forme de flottant

J'ai des données stockées dans un CSV où la première ligne est des chaînes (noms de colonnes) et les lignes restantes sont des nombres. Comment puis-je stocker cela dans un tableau numpy? Tout ce que je peux trouver, c'est comment définir le type de données pour les colonnes mais pas pour les lignes.

En ce moment, je saute simplement les en-têtes pour faire les calculs, mais j'ai besoin d'avoir les en-têtes dans la version finale. Mais si je laisse les en-têtes dedans, il place le tableau entier en chaîne et les calculs échouent.

Voici ce que j'ai:

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

Vous pouvez conserver les noms des colonnes si vous utilisez le names=True argument dans la fonction np.genfromtxt

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

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

La sortie sera un tableau structuré, où vous pourrez accéder aux colonnes individuelles par leur nom. Les noms seront tirés de votre première ligne. Certaines modifications peuvent se produire, les espaces dans un nom de colonne seront remplacés par _ par exemple. Le documentation devrait couvrir la plupart des questions que vous pourriez avoir.

40
Pierre GM

Je ne sais pas ce que vous voulez dire lorsque 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 comme ceci:

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

puis accédez aux colonnes avec data['col1_name'], data['col2_name'], etc.

12
user545424

L'idée d'un tableau numpy est que tous les éléments sont du même type. Lisez les en-têtes dans une liste Python et gérez-les 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. Le stockage dans le tableau serait redondant dans ce cas.

2
kindall