Savez-vous comment obtenir l'index ou la colonne d'un DataFrame sous la forme d'un tableau NumPy ou d'une liste python?
Pour obtenir un tableau NumPy, vous devez utiliser l'attribut values
:
In [1]: df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]}, index=['a', 'b', 'c']); df
A B
a 1 4
b 2 5
c 3 6
In [2]: df.index.values
Out[2]: array(['a', 'b', 'c'], dtype=object)
Ceci accède à la façon dont les données sont déjà stockées, il n'y a donc pas besoin de conversion.
Remarque: cet attribut est également disponible pour de nombreux objets de pandas.
In [3]: df['A'].values
Out[3]: Out[16]: array([1, 2, 3])
Pour obtenir l'index sous forme de liste, appelez tolist
:
In [4]: df.index.tolist()
Out[4]: ['a', 'b']
Et de même, pour les colonnes.
Vous pouvez utiliser df.index
pour accéder à l'objet index, puis obtenir les valeurs dans une liste à l'aide de df.index.tolist()
. De même, vous pouvez utiliser df['col'].tolist()
pour la série.
Si vous traitez avec une structure de données multi-index, vous voudrez peut-être extraire uniquement la colonne d'un nom du multi-index. Vous pouvez le faire comme
df.index.get_level_values('name_sub_index')
et bien sûr, name_sub_index
doit être un élément de la FrozenList
df.index.names
Actuel à partir de v0.24.0 + , 2019.
.values
_ en faveur de ces méthodes!À partir de la v0.24.0, nous aurons deux nouvelles méthodes préférées pour obtenir des tableaux NumPy à partir des objets Index
, Series
et DataFrame
: ce sont to_numpy()
et .array
. En ce qui concerne l'utilisation, la documentation mentionne:
Nous n’avons ni supprimé ni obsolète _
Series.values
_ ou _DataFrame.values
_, mais , nous vous recommandons vivement d’utiliser _.array
_ ou.to_numpy()
à la place.
Voir cette section des notes de version v0.24. pour plus d'informations.
_df.index.to_numpy()
# array(['a', 'b'], dtype=object)
df['A'].to_numpy()
# array([1, 4])
_
Par défaut, une vue est retournée. Toute modification apportée affectera l'original.
_v = df.index.to_numpy()
v[0] = -1
df
A B
-1 1 2
b 4 5
_
Si vous avez plutôt besoin d'une copie, utilisez _to_numpy(copy=True
_);
_v = df.index.to_numpy(copy=True)
v[-1] = -123
df
A B
a 1 2
b 4 5
_
Notez que cette fonction fonctionne également pour DataFrames (contrairement à _.array
_).
attribut array
Cet attribut retourne un objet ExtensionArray
qui sauvegarde l'index/la série.
_pd.__version__
# '0.24.0rc1'
# Setup.
df = pd.DataFrame([[1, 2], [4, 5]], columns=['A', 'B'], index=['a', 'b'])
df
A B
a 1 2
b 4 5
_
_df.index.array
# <PandasArray>
# ['a', 'b']
# Length: 2, dtype: object
df['A'].array
# <PandasArray>
# [1, 4]
# Length: 2, dtype: int64
_
A partir de là, il est possible d’obtenir une liste en utilisant list
:
_list(df.index.array)
# ['a', 'b']
list(df['A'].array)
# [1, 4]
_
ou simplement appeler directement .tolist()
:
_df.index.tolist()
# ['a', 'b']
df['A'].tolist()
# [1, 4]
_
En ce qui concerne ce qui est retourné, les docs mentionnent,
Pour
Series
etIndex
es soutenus par des tableaux NumPy normaux, _Series.array
_ renverra un nouveau _arrays.PandasArray
_, qui est un encapsuleur fin (sans copie) autour de _numpy.ndarray
_. _arrays.PandasArray
_ n’est pas particulièrement utile en soi, mais fournit la même interface que n’importe quel tableau d’extensions défini dans pandas ou par une bibliothèque tierce.
Donc, pour résumer, _.array
_ retournera soit
ExtensionArray
existant qui sauvegarde l’index/la série, ouExtensionArray
est créé en tant qu'encapsuleur mince sur le tableau sous-jacent. Justification de l'ajout de deux nouvelles méthodes
Ces fonctions ont été ajoutées à la suite de discussions dans le cadre de deux problèmes concernant GitHub GH19954 et GH2362 .
Plus précisément, les docs mentionnent le raisonnement suivant:
[...] avec _
.values
_ il n'était pas clair si la valeur renvoyée serait le tableau réel, une transformation de celui-ci ou l'un des pandas tableaux personnalisés (commeCategorical
). Par exemple, avecPeriodIndex
, _.values
_ génère chaque fois un nouvel objetndarray
of period. [...]
Ces deux fonctions visent à améliorer la cohérence de l'API, ce qui constitue un pas important dans la bonne direction.
Enfin, _.values
_ ne sera pas obsolète dans la version actuelle, mais je suppose que cela pourrait se produire à l'avenir. J'invite donc les utilisateurs à migrer vers la nouvelle API dès que possible.
Depuis pandas v0.13, vous pouvez également utiliser get_values
:
_df.index.get_values()
_
Vous trouverez ci-dessous un moyen simple de convertir une colonne dataframe en tableau numpy.
df = pd.DataFrame(somedict)
ytrain = df['label']
ytrain_numpy = np.array([x for x in ytrain['label']])
ytrain_numpy est un tableau numpy.
J'ai essayé avec to.numpy()
mais il m'a donné l'erreur ci-dessous: TypeError: aucune conversion prise en charge pour les types: (dtype ('O'),) tout en effectuant la classfication de pertinence binaire à l'aide de SVC linéaire. to.numpy () était en train de convertir dataFrame en tableau numpy mais le type de données de l'élément interne était list en raison de l'erreur observée ci-dessus.