¿Cómo obtengo el recuento de filas de un DataFrame de pandas?
Esta tabla resume las diferentes situaciones en las que desea contar algo en un DataFrame (o Serie, para completar), junto con los métodos recomendados.
Notas al pie
DataFrame.count
devuelve los recuentos para cada columna como un Series
ya que el recuento no nulo varía según la columna.
DataFrameGroupBy.size
devuelve un Series
, ya que todas las columnas del mismo grupo comparten el mismo recuento de filas.
DataFrameGroupBy.count
devuelve a DataFrame
, ya que el recuento no nulo podría diferir entre las columnas del mismo grupo. Para obtener el recuento no nulo en grupo para una columna específica, use df.groupby(...)['x'].count()
donde "x" es la columna a contar.
Ejemplos de código mínimo
A continuación, muestro ejemplos de cada uno de los métodos descritos en la tabla anterior. Primero, la configuración -
df = pd.DataFrame({
'A': list('aabbc'), 'B': ['x', 'x', np.nan, 'x', np.nan]})
s = df['B'].copy()
df
A B
0 a x
1 a x
2 b NaN
3 b x
4 c NaN
s
0 x
1 x
2 NaN
3 x
4 NaN
Name: B, dtype: object
Recuento de filas de una trama de datos: len(df)
, df.shape[0]
olen(df.index)
len(df)
# 5
df.shape[0]
# 5
len(df.index)
# 5
Parece una tontería comparar el rendimiento de las operaciones de tiempo constante, especialmente cuando la diferencia está en el nivel de "en serio, no te preocupes por eso". Pero esto parece ser una tendencia con otras respuestas, así que estoy haciendo lo mismo para completar.
De los 3 métodos anteriores, len(df.index)
(como se menciona en otras respuestas) es el más rápido.
Nota
- Todos los métodos anteriores son operaciones de tiempo constante, ya que son simples búsquedas de atributos.
df.shape
(similar a ndarray.shape
) es un atributo que devuelve una tupla de (# Rows, # Cols)
. Por ejemplo, df.shape
vuelve (8,
2)
para el ejemplo aquí.
Número de columnas de una trama de datos: df.shape[1]
,len(df.columns)
df.shape[1]
# 2
len(df.columns)
# 2
Análogo a len(df.index)
, len(df.columns)
es el más rápido de los dos métodos (pero requiere más caracteres para escribir).
Número de filas de una Serie: len(s)
, s.size
,len(s.index)
len(s)
# 5
s.size
# 5
len(s.index)
# 5
s.size
y len(s.index)
son casi iguales en términos de velocidad. Pero lo recomiendo len(df)
.
Note
size
es un atributo y devuelve el número de elementos (= recuento de filas para cualquier serie). Los marcos de datos también definen un atributo de tamaño que devuelve el mismo resultado que df.shape[0] * df.shape[1]
.
Recuento de filas no nulas: DataFrame.count
ySeries.count
Los métodos descritos aquí solo cuentan valores no nulos (lo que significa que se ignoran los NaN).
Las llamadas DataFrame.count
devolverán recuentos que no sean NaN para cada columna:
df.count()
A 5
B 3
dtype: int64
Para la serie, use Series.count
con un efecto similar:
s.count()
# 3
Recuento de filas en grupo: GroupBy.size
Para DataFrames
, use DataFrameGroupBy.size
para contar el número de filas por grupo.
df.groupby('A').size()
A
a 2
b 2
c 1
dtype: int64
Del mismo modo, para Series
, lo utilizará SeriesGroupBy.size
.
s.groupby(df.A).size()
A
a 2
b 2
c 1
Name: B, dtype: int64
En ambos casos, Series
se devuelve a. Esto también tiene sentido DataFrames
ya que todos los grupos comparten el mismo recuento de filas.
Recuento de filas no nulas en grupo: GroupBy.count
Similar a lo anterior, pero use GroupBy.count
, no GroupBy.size
. Tenga en cuenta que size
siempre devuelve a Series
, mientras que count
devuelve un Series
if en una columna específica, o bien a DataFrame
.
Los siguientes métodos devuelven lo mismo:
df.groupby('A')['B'].size()
df.groupby('A').size()
A
a 2
b 2
c 1
Name: B, dtype: int64
Mientras tanto, para count
, tenemos
df.groupby('A').count()
B
A
a 2
b 1
c 0
... invocó todo el objeto GroupBy, v / s,
df.groupby('A')['B'].count()
A
a 2
b 1
c 0
Name: B, dtype: int64
Llamado en una columna específica.