Savez-vous comment obtenir l'index ou la colonne d'un DataFrame en tant que tableau NumPy ou liste python?
Savez-vous comment obtenir l'index ou la colonne d'un DataFrame en tant que tableau NumPy ou liste python?
Réponses:
Pour obtenir un tableau NumPy, vous devez utiliser l' values
attribut:
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)
Cela permet d'accéder à 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 autres 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', 'c']
Et de même, pour les colonnes.
.values
est obsolète, .to_numpy()
est le remplacement suggéré si vous voulez un tableau NumPy. Pouvez-vous développer Cela accède à la façon dont les données sont déjà stockées, donc il n'y a pas besoin de conversion ?
Vous pouvez utiliser df.index
pour accéder à l'objet d'index, puis récupérer les valeurs dans une liste à l'aide de df.index.tolist()
. De même, vous pouvez utiliser df['col'].tolist()
pour la série.
df.index.values.tolist()
df.index.tolist()
ne renvoie pas de méthode d'instance. Il renvoie une liste d'indices. Il s'agit d'une méthode définie sur index pandas. Bien que l'appel de valeurs en premier soit une possibilité, déléguer le travail à numpy n'est pas une correction - juste une alternative.
.values
au profit de ces méthodes!A partir de v0.24.0 partir, nous aurons deux nouvelles méthodes préférées pour obtenir la fessée marque tableaux numpy à partir Index
, Series
et les DataFrame
objets: ils sont to_numpy()
, et .array
. Concernant l'utilisation, les documents mentionnent:
Nous n'avons pas supprimé ou déprécié
Series.values
ouDataFrame.values
, mais nous recommandons fortement d'utiliser.array
ou à la.to_numpy()
place.
Consultez cette section des notes de mise à jour v0.24.0 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 les DataFrames (mais .array
pas).
array
Attribut
Cet attribut renvoie unExtensionArray
objet 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
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 appelez directement .tolist()
:
df.index.tolist()
# ['a', 'b']
df['A'].tolist()
# [1, 4]
Concernant ce qui est retourné, les documents mentionnent,
Pour
Series
etIndex
es soutenu par des tableaux NumPy normaux,Series.array
renverra un nouveauarrays.PandasArray
, qui est un wrapper fin (sans copie) autour de anumpy.ndarray
.arrays.PandasArray
n'est pas particulièrement utile en soi, mais il fournit la même interface que n'importe quel tableau d'extension défini dans pandas ou par une bibliothèque tierce.
Donc, pour résumer, .array
reviendra soit
ExtensionArray
support existant de l'Indice / de la Série, ouExtensionArray
objet est créé en tant que wrapper 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 sous deux problèmes GitHub GH19954 et GH23623 .
Plus précisément, les documents mentionnent la justification:
[...] avec
.values
il n'était pas clair si la valeur retournée serait le tableau réel, une transformation de celui-ci, ou l'un des tableaux personnalisés pandas (commeCategorical
). Par exemple, avecPeriodIndex
,.values
génère àndarray
chaque fois un nouvel objet période. [...]
Ces deux fonctions visent à améliorer la cohérence de l'API, ce qui constitue une étape majeure dans la bonne direction.
Enfin, .values
ne sera pas déconseillé dans la version actuelle, mais je m'attends à ce que cela se produise à un moment donné dans le futur, donc j'exhorte les utilisateurs à migrer vers la nouvelle API, dès que vous le pouvez.
Si vous avez affaire à une trame de données multi-index, il peut être intéressant d'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 laFrozenList
df.index.names
Depuis pandas v0.13, vous pouvez également utiliser get_values
:
df.index.get_values()
get_values
appelle juste .values
. Il y a plus de caractères à taper.
J'ai converti les pandas dataframe
en list
puis utilisé le basique list.index()
. Quelque chose comme ça:
dd = list(zone[0]) #Where zone[0] is some specific column of the table
idx = dd.index(filename[i])
Vous avez votre valeur d'index en tant que idx
.
Une façon plus récente de procéder consiste à utiliser la fonction .to_numpy ().
Si j'ai une trame de données avec une colonne 'prix', je peux la convertir comme suit:
priceArray = df['price'].to_numpy()
Vous pouvez également passer le type de données, tel que float ou object, comme argument de la fonction
Vous trouverez ci-dessous un moyen simple de convertir une colonne de trame de données 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 cela m'a donné l'erreur ci-dessous:
TypeError: aucune conversion prise en charge pour les types: (dtype ('O'),) lors de la classification de pertinence binaire en utilisant SVC linéaire. to.numpy () convertissait le dataFrame en tableau numpy mais le type de données de l'élément interne était list à cause duquel l'erreur ci-dessus a été observée.
to_numpy
, cependant.