python - array - ¿Cuál es la diferencia entre tamaño y conteo en pandas?
pandas series (4)
¿Cuál es la diferencia entre tamaño y conteo en pandas?
Las otras respuestas han señalado la diferencia, sin embargo, no es del
todo exacto
decir "el
size
cuenta NaN mientras que el
count
no".
Si bien el
size
sí cuenta los NaN, esto es en realidad una consecuencia del hecho de que el
size
devuelve el
tamaño
(o la longitud) del objeto al
que se llama.
Naturalmente, esto también incluye filas / valores que son NaN.
Entonces, para resumir, el
size
devuelve el tamaño de la Serie / DataFrame
1
,
df = pd.DataFrame({''A'': [''x'', ''y'', np.nan, ''z'']})
df
A
0 x
1 y
2 NaN
3 z
df.A.size
# 4
... mientras
count
cuenta los valores no NaN:
df.A.count()
# 3
Observe que el
size
es un atributo (da el mismo resultado que
len(df)
o
len(df.A)
).
count
es una función.
1.
DataFrame.size
también es un atributo y devuelve el número de elementos en el DataFrame (filas x columnas).
Comportamiento con
GroupBy
- Estructura de salida
Además de la diferencia básica, también existe la diferencia en la estructura de la salida generada cuando se llama
GroupBy.size()
vs
GroupBy.count()
.
df = pd.DataFrame({''A'': list(''aaabbccc''), ''B'': [''x'', ''x'', np.nan, np.nan, np.nan, np.nan, ''x'', ''x'']})
df
A B
0 a x
1 a x
2 a NaN
3 b NaN
4 b NaN
5 c NaN
6 c x
7 c x
Considerar,
df.groupby(''A'').size()
A
a 3
b 2
c 3
dtype: int64
Versus,
df.groupby(''A'').count()
B
A
a 2
b 0
c 2
GroupBy.count
devuelve un DataFrame cuando llama al
count
en todas las columnas, mientras que
GroupBy.size
devuelve una Serie.
La razón es que el
size
es el mismo para todas las columnas, por lo que solo se devuelve un único resultado.
Mientras tanto, el
count
se llama para cada columna, ya que los resultados dependerán de cuántos NaN tenga cada columna.
Comportamiento con
pivot_table
Otro ejemplo es cómo
pivot_table
trata estos datos.
Supongamos que nos gustaría calcular la tabulación cruzada de
df
A B
0 0 1
1 0 1
2 1 2
3 0 2
4 0 0
pd.crosstab(df.A, df.B) # Result we expect, but with `pivot_table`.
B 0 1 2
A
0 1 2 1
1 0 0 1
Con
pivot_table
, puede emitir
size
:
df.pivot_table(index=''A'', columns=''B'', aggfunc=''size'', fill_value=0)
B 0 1 2
A
0 1 2 1
1 0 0 1
Pero la
count
no funciona;
se devuelve un DataFrame vacío:
df.pivot_table(index=''A'', columns=''B'', aggfunc=''count'')
Empty DataFrame
Columns: []
Index: [0, 1]
Creo que la razón de esto es que
''count''
debe hacerse en la serie que se pasa al argumento de
values
, y cuando no se pasa nada, los pandas deciden no hacer suposiciones.
¿Esa es la diferencia entre
groupby("x").count
groupby("x").size
y
groupby("x").size
en pandas?
¿El tamaño solo excluye cero?
Cuando se trata de marcos de datos normales, entonces la única diferencia será una inclusión de valores NAN, lo que significa que el recuento no incluye valores NAN al contar filas.
Pero si estamos usando estas funciones con
groupby
entonces, para obtener los resultados correctos por
count()
tenemos que asociar cualquier campo numérico con
groupby
para obtener el número exacto de grupos donde para
size()
no hay necesidad de este tipo de asociación.
Solo para agregar un poco a la respuesta de @ Edchum, incluso si los datos no tienen valores de NA, el resultado de count () es más detallado, usando el ejemplo anterior:
grouped = df.groupby(''a'')
grouped.count()
Out[197]:
b c
a
0 2 2
1 1 1
2 2 3
grouped.size()
Out[198]:
a
0 2
1 1
2 3
dtype: int64
size
incluye valores de
NaN
, el
count
no:
In [46]:
df = pd.DataFrame({''a'':[0,0,1,2,2,2], ''b'':[1,2,3,4,np.NaN,4], ''c'':np.random.randn(6)})
df
Out[46]:
a b c
0 0 1 1.067627
1 0 2 0.554691
2 1 3 0.458084
3 2 4 0.426635
4 2 NaN -2.238091
5 2 4 1.256943
In [48]:
print(df.groupby([''a''])[''b''].count())
print(df.groupby([''a''])[''b''].size())
a
0 2
1 1
2 2
Name: b, dtype: int64
a
0 2
1 1
2 3
dtype: int64