array python pandas numpy difference

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