L'ambiguïté dans les Pandas Dataframe / Tableau Numpy “axe” définition
J'ai été très confus sur la façon python axes sont définis, et qu'elles se réfèrent à un DataFrame de lignes ou de colonnes. Considérez le code ci-dessous:
>>> df = pd.DataFrame([[1, 1, 1, 1], [2, 2, 2, 2], [3, 3, 3, 3]], columns=["col1", "col2", "col3", "col4"])
>>> df
col1 col2 col3 col4
0 1 1 1 1
1 2 2 2 2
2 3 3 3 3
Donc, si nous appelons df.mean(axis=1)
, nous allons obtenir une moyenne pour les lignes:
>>> df.mean(axis=1)
0 1
1 2
2 3
Cependant, si nous appelons df.drop(name, axis=1)
, nous avons fait supprimer une colonne, pas une ligne:
>>> df.drop("col4", axis=1)
col1 col2 col3
0 1 1 1
1 2 2 2
2 3 3 3
Quelqu'un peut-il m'aider à comprendre ce qu'on entend par un "axe" dans les pandas/numpy/scipy?
Une note de côté, DataFrame.mean
pourrait être défini de mal. Il est dit dans la documentation de DataFrame.moyenne
que axis=1
est censé signifier une moyenne sur les colonnes, pas les lignes...
- Pour une explication détaillée de l'alias, 'colonnes' et 'index'/'lignes' voir cette réponse ci-dessous.
- C'est juste bizarre. L'axe doit être uniforme à travers le
mean
et ladrop
. Il faut non linéaire de la pensée à l'arrivée au comportement réel.
Vous devez vous connecter pour publier un commentaire.
C'est peut-être plus simple à retenir comme 0=bas et 1=à travers.
Cela signifie:
axis=0
d'appliquer une méthode en bas de chaque colonne ou de la ligne d'étiquettes (l'index).axis=1
d'appliquer une méthode sur chaque ligne, ou à la colonne des étiquettes.Voici une photo pour afficher les parties d'un DataFrame que chaque axe se réfère à:
Il est également utile de rappeler que les Pandas suit NumPy utilisation du mot
axis
. L'utilisation est expliquée dans NumPy est glossaire des termes:Donc, concernant la méthode en question,
df.mean(axis=1)
, semble être correctement défini. Il prend la moyenne des entrées horizontalement à travers les colonnes, qui est, le long de chaque ligne. D'autre part,df.mean(axis=0)
serait une opération agissant verticalement à la baisse sur les lignes.De même,
df.drop(name, axis=1)
fait référence à une action sur les étiquettes de colonne, car intuitivement, ils passent à travers l'axe horizontal. La spécification deaxis=0
rendrait la méthode de loi sur des lignes à la place.df.apply
comme similaire à une méthode commedf.sum
. Par exemple,df.sum(axis=0)
somme de chaque colonne de la DataFrame. De même, vous pouvez écriredf.apply(sum, axis=0)
à faire exactement la même opération. Alors que l'opération est en effet appliqué à chaque colonne dans le DataFrame, la fonction s'exécute en bas de l'axe 0.MARGIN
(similaire àaxis
dans les pandas) valeur de "1" correspond à "lignes" qui signifie que la fonction est appliquée pour chaque ligne, alors que la plus grande valeur de "2" se réfère à des "colonnes", ce qui signifie que la fonction est appliquée pour chaque colonne.Une autre façon de l'expliquer:
Sur
df.drop
(axe moyen de la position)Sur
df.apply
(axe des moyens de la direction)Il y a déjà de bonnes réponses, mais je vous donne un autre exemple avec > 2 dimensions.
Le paramètre
axis
signifie axe à changé.Par exemple, considérer qu'il y a un dataframe, avec la dimension a x b x c.
df.mean(axis=1)
retourne un dataframe avec dimenstion a x 1 x c.df.drop("col4", axis=1)
retourne un dataframe, avec la dimension a x (b-1) x c.Il devrait être plus largement connu que la chaîne alias 'index' et "colonnes" peut être utilisé à la place des nombres entiers 0/1. Les alias sont beaucoup plus explicites et m'aider à me rappeler comment les calculs prennent place. Un alias "index" est "rangées".
Quand
axis='index'
est utilisé, ensuite, les calculs peuvent se produire sur les colonnes, ce qui est source de confusion. Mais, je m'en souviens comme l'obtention d'un résultat qui est de la même taille que l'autre ligne.Nous allons obtenir des données sur l'écran pour voir de quoi je parle:
Lorsque nous voulons prendre la moyenne de toutes les colonnes, nous utilisons
axis='index'
pour obtenir le suivant:Le même résultat pourrait être obtenu par:
À obtenir l'utilisation d'une opération de gauche à droite sur les lignes, l'utilisation de l'axe= "colonnes". Je me souviens d'elle en pensant qu'une colonne supplémentaire peut être ajouté à mon DataFrame:
Le même résultat pourrait être obtenu par:
Ajouter une nouvelle ligne avec l'axe=0/index/lignes
Nous allons utiliser ces résultats pour ajouter des lignes ou des colonnes pour compléter l'explication. Donc, chaque fois que l'aide de l'axe = 0/index/lignes, ses comme obtenir une nouvelle ligne de la DataFrame. Nous allons ajouter une ligne:
Ajouter une nouvelle colonne avec axis=1/les colonnes
De même, lors de l'axe=1/les colonnes, il va créer une base de données qui peut être facilement faite dans sa propre colonne:
Il semble que vous pouvez voir tous les alias avec les variables privées suivantes:
Lors de l'axe= "rangées" ou de l'axe=0, cela signifie accéder à des éléments dans la direction des lignes, du haut vers le bas. Si l'application de la somme le long de l'axe=0, il va nous donner les totaux de chaque colonne.
Lors de l'axe= "colonnes" ou axis=1, cela signifie accéder à des éléments dans la direction des colonnes, de gauche à droite. Si l'application de la somme le long de l'axe=1, nous obtenons un total de chaque ligne.
Encore confuse! Mais le rend un peu plus facile pour moi.