python - plotting - pandas.dataframe.plot example
¿Qué significa axis in pandas? (11)
Aquí está mi código para generar un marco de datos:
import pandas as pd
import numpy as np
dff = pd.DataFrame(np.random.randn(1,2),columns=list(''AB''))
entonces obtuve el marco de datos:
+------------+---------+--------+
| | A | B |
+------------+---------+---------
| 0 | 0.626386| 1.52325|
+------------+---------+--------+
Cuando escribo el comando:
dff.mean(axis=1)
Tengo :
0 1.074821
dtype: float64
De acuerdo con la referencia de los pandas, axis = 1 representa las columnas y espero que el resultado del comando sea
A 0.626386
B 1.523255
dtype: float64
Así que aquí está mi pregunta: ¿qué significa axis in pandas?
Eje en vista de la programación es la posición en la forma tupla. Aquí hay un ejemplo:
import numpy as np
a=np.arange(120).reshape(2,3,4,5)
a.shape
Out[3]: (2, 3, 4, 5)
np.sum(a,axis=0).shape
Out[4]: (3, 4, 5)
np.sum(a,axis=1).shape
Out[5]: (2, 4, 5)
np.sum(a,axis=2).shape
Out[6]: (2, 3, 5)
np.sum(a,axis=3).shape
Out[7]: (2, 3, 4)
La media en el eje hará que esa dimensión se elimine.
Refiriéndose a la pregunta original, la forma dff es (1,2). Usar axis = 1 cambiará la forma a (1,).
El diseñador de pandas, Wes McKinney, solía trabajar intensamente en datos financieros. Piense en las columnas como nombres de acciones e índices como precios diarios. A continuación, puede adivinar cuál es el comportamiento predeterminado (es decir, axis=0
) con respecto a estos datos financieros. axis=1
se puede simplemente pensar como ''la otra dirección''.
Por ejemplo, las funciones de estadísticas, como mean()
, sum()
, describe()
, count()
todas predeterminadas a columna porque tiene más sentido hacerlas para cada stock. sort_index(by=)
también se predetermina a la columna. fillna(method=''ffill'')
se completará a lo largo de la columna porque es el mismo stock. dropna()
en fila por defecto porque probablemente solo quiera descartar el precio en ese día en lugar de tirar todos los precios de ese stock.
Del mismo modo, la indexación de los corchetes se refiere a las columnas, ya que es más común elegir una acción en lugar de elegir un día.
En Pandas:
- axis = 0 significa a lo largo de "índices". Es una operación de hilera .
Supongamos que para realizar la operación concat () en dataframe1 y dataframe2, tomaremos dataframe1 y sacaremos 1st row del dataframe1 y lo colocaremos en el nuevo DF, luego sacamos otra fila del dataframe1 y lo colocamos en un nuevo DF, repetimos este proceso hasta llegamos al final del cuadro de datos1.
Luego, hacemos el mismo proceso para dataframe2.
Básicamente, apilando dataframe2 encima de dataframe1 o viceversa. Ej. Hacer una pila de libros sobre una mesa o piso
- eje = 1 significa a lo largo de "columnas". Es una operación en columnas.
Supongamos que para realizar la operación concat () en dataframe1 y dataframe2, sacaremos la primera columna completa (también conocida como 1st series) de dataframe1 y la colocaremos en un nuevo DF, luego sacamos la segunda columna de dataframe1 y la mantenemos adyacente (lateralmente) ) , tenemos que repetir esta operación hasta que todas las columnas estén terminadas.
Luego, repetimos el mismo proceso en dataframe2.
Básicamente, apilando dataframe2 de lado. Por ejemplo, organizar libros en una estantería.
Especifica el eje a lo largo del cual se calculan los medios. Por defecto axis=0
. Esto es coherente con el uso numpy.mean
cuando el axis
se especifica explícitamente (en numpy.mean
, axis == None por defecto, que calcula el valor medio sobre la matriz aplanada), en cuyo axis=0
largo de las filas (es decir, índice en pandas) y axis=1
largo de las columnas . Para mayor claridad, se puede optar por especificar axis=''index''
(en lugar de axis=0
) o axis=''columns''
(en lugar de axis=1
).
+------------+---------+--------+
| | A | B |
+------------+---------+---------
| 0 | 0.626386| 1.52325|----axis=1----->
+------------+---------+--------+
| |
| axis=0 |
↓ ↓
Estas respuestas ayudan a explicar esto, pero todavía no es perfectamente intuitivo para un no programador (es decir, alguien como yo que está aprendiendo Python por primera vez en el contexto de cursos de ciencias de datos). Todavía encuentro que usar los términos "a lo largo" o "para cada" wrt en filas y columnas es confuso.
Lo que tiene más sentido para mí es decirlo de esta manera:
- El eje 0 actuará en todas las FILAS en cada COLUMNA
- El Eje 1 actuará en todas las COLUMNAS de cada FILA
Entonces, una media en el eje 0 será la media de todas las filas en cada columna, y una media en el eje 1 será una media de todas las columnas en cada fila.
En última instancia, esto es lo mismo que @zhangxaochen y @Michael, pero de una manera que me resulta más fácil interiorizar.
La forma más fácil de entender es hablar de si está calculando una estadística para cada columna ( axis = 0
) o cada fila ( axis = 1
). Si calcula una estadística, digamos una media, con un axis = 0
, obtendrá esa estadística para cada columna. Entonces, si cada observación es una fila y cada variable está en una columna, obtendría la media de cada variable. Si establece axis = 1
entonces calculará su estadística para cada fila. En nuestro ejemplo, obtendría la media de cada observación en todas sus variables (quizás desee el promedio de medidas relacionadas).
axis = 0
: por columna = column-wise = a lo largo de las filas
axis = 1
: by row = row-wise = a lo largo de las columnas
Las matrices están diseñadas con los denominados ejes = 0 y filas posicionadas verticalmente frente a eje = 1 y columnas posicionadas horizontalmente. Axis se refiere a la dimensión de la matriz.
Mi pensamiento: Axis = n, donde n = 0, 1, etc. significa que la matriz está colapsada (plegada) a lo largo de ese eje. Entonces, en una matriz 2D, cuando colapsas a lo largo de 0 (filas), realmente estás operando en una columna a la vez. De manera similar para matrices de orden superior.
Esto no es lo mismo que la referencia normal a una dimensión en una matriz, donde 0 -> fila y 1 -> columna. Del mismo modo para otras dimensiones en una matriz de N dimensiones.
Significa que tomó la media basada usando cada columna, axis = 0 le daría lo que piensa, pero axis = 1 da
(0.626386+1.52325)/2
1.075
axis = 0 significa arriba hacia abajo axis = 1 significa de izquierda a derecha
sums[key] = lang_sets[key].iloc[:,1:].sum(axis=0)
El ejemplo dado es tomar la suma de todos los datos en la columna == clave.
axis
refiere a la dimensión de la matriz, en el caso de pd.DataFrame
s axis=0
es la dimensión que apunta hacia abajo y axis=1
la que apunta hacia la derecha.
Ejemplo: piense en una ndarray
con forma (3,5,7)
.
a = np.ones((3,5,7))
a
es un ndarray
tridimensional, es decir, tiene 3 ejes ("ejes" es el plural de "eje"). La configuración de a
se verá como 3 rebanadas de pan donde cada porción es de dimensión 5 por 7. a[0,:,:]
se referirá a la porción 0, a[1,:,:]
se referirá a la porción 1, etc.
a.sum(axis=0)
aplicará sum()
largo del eje 0-a de a
. Agregará todas las rebanadas y terminará con una porción de forma (5,7)
.
a.sum(axis=0)
es equivalente a
b = np.zeros((5,7))
for i in range(5):
for j in range(7):
b[i,j] += a[:,i,j].sum()
b
y a.sum(axis=0)
se verán así
array([[ 3., 3., 3., 3., 3., 3., 3.],
[ 3., 3., 3., 3., 3., 3., 3.],
[ 3., 3., 3., 3., 3., 3., 3.],
[ 3., 3., 3., 3., 3., 3., 3.],
[ 3., 3., 3., 3., 3., 3., 3.]])
En un pd.DataFrame
, los ejes funcionan de la misma manera que en numpy.array
s: axis=0
aplicará sum()
o cualquier otra función de reducción para cada columna.
NB En la respuesta de @ zhangxaochen, encuentro que las frases "a lo largo de las filas" y "a lo largo de las columnas" son un poco confusas. axis=0
debe referirse a "a lo largo de cada columna", y axis=1
"a lo largo de cada fila".