Vous pouvez créer num ndarray
s avec des types de données de type C arbitraires pour chacun des champs. L'astuce consiste à create the datatype for the array d'abord, puis définissez cela comme dtype
pour le tableau. La seule chose gênante à propos de ceci est, puisque ce sont des types de style C, les types doivent être définis explicitement et cela inclut, si vous avez des chaînes, de définir le nombre de caractères que chaque champ peut contenir.
Par exemple:
>>> import numpy as np
>>> person_dt = np.dtype([('Name', 'S25'), ('Age', np.uint8)])
>>> person_dt
dtype([('Name', 'S25'), ('Age', 'u1')])
>>> persons = np.array([('alice', 35), ('bob', 39)], dtype=person_dt)
>>> persons
array([(b'alice', 35), (b'bob', 39)],
dtype=[('Name', 'S25'), ('Age', 'u1')])
Ici, je suis la création d'un numpy dtype
. Chaque partie distincte d'un tableau est un field
, et j'affecte Name
et Age
aux noms de ces champs, et d'assigner le type pour chaque champ. Donc, le champ Name
est une chaîne de 25 caractères ou moins (qui est une chaîne terminée \0
comme vous auriez en C), et l'âge est un entier non signé puisque nos âges seront bien sûr inférieurs à 255. Notez le b
avant le chaîne représente juste que le type est un byte-string
Ensuite, je crée simplement le tableau avec le nouveau dtype
et transmettre les valeurs.
Ce qui est cool à ce sujet est que vous pouvez saisir les valeurs par champ auquel ils appartiennent.Par exemple, vous pouvez saisir tous les âges en saisissant le champ Age
, et il aura le type I affecté les âges à:
>>> persons['Age']
array([35, 39], dtype=uint8)
vous pouvez donc aller plus loin et index dans ces tableaux résultant:
>>> persons['Name'][1]
b'bob'
et vous pouvez toujours créer et assigner comme vous le feriez normalement:
>>> new_persons = np.zeros(5, dtype=person_dt)
>>> new_persons
array([(b'', 0), (b'', 0), (b'', 0), (b'', 0), (b'', 0)],
dtype=[('Name', 'S25'), ('Age', 'u1')])
>>> new_persons[0] = ('alice', 25)
>>> new_persons[1] = ('bob', 26)
>>> new_persons['Name'][2:5]
array([b'', b'', b''],
dtype='|S25')
>>> new_persons['Name'][2:5] = 'carol', 'david', 'eve'
>>> new_persons['Age'][2:5] = 27, 28, 29
>>> new_persons
array([(b'alice', 25), (b'bob', 26), (b'carol', 27), (b'david', 28), (b'eve', 29)],
dtype=[('Name', 'S25'), ('Age', 'u1')])
J'assisté à une conférence un peu de temps il y a tout sur la création et la gestion numpy dtypes
et c'était génial; le cahier de Jupyter pour la conversation est en ligne et vous pouvez access it here, qui pourrait jeter un peu plus de lumière sur toutes les différentes façons dont vous pouvez les utiliser.
La fonction 'get_value()' doit prendre deux arguments dans 'pandas'. –
Merci, @GergesDib. Je viens de le changer – CDY
Qu'est-ce que 'data.dtypes'? – hpaulj