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' valuesattribut:
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.
.valuesest 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.indexpour 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.
.valuesau 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, Serieset les DataFrameobjets: ils sont to_numpy(), et .array. Concernant l'utilisation, les documents mentionnent:
Nous n'avons pas supprimé ou déprécié
Series.valuesouDataFrame.values, mais nous recommandons fortement d'utiliser.arrayou à 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 .arraypas).
arrayAttribut
Cet attribut renvoie unExtensionArrayobjet 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
SeriesetIndexes soutenu par des tableaux NumPy normaux,Series.arrayrenverra un nouveauarrays.PandasArray, qui est un wrapper fin (sans copie) autour de anumpy.ndarray.arrays.PandasArrayn'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, .arrayreviendra soit
ExtensionArraysupport existant de l'Indice / de la Série, ouExtensionArrayobjet 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
.valuesil 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,.valuesgénère àndarraychaque 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, .valuesne 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_indexdoit être un élément de laFrozenList df.index.names
Depuis pandas v0.13, vous pouvez également utiliser get_values:
df.index.get_values()
get_valuesappelle juste .values. Il y a plus de caractères à taper.
J'ai converti les pandas dataframeen listpuis 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.