Como obtenho a contagem de linhas de um DataFrame do pandas?
Esta tabela resume as diferentes situações nas quais você deseja contar algo em um DataFrame (ou em série, para completar), juntamente com o (s) método (s) recomendado (s).

Notas de rodapé
DataFrame.countretorna contagens para cada coluna como a Seriesdesde que a contagem não nula varia de acordo com a coluna.
DataFrameGroupBy.sizeretorna a Series, pois todas as colunas do mesmo grupo compartilham a mesma contagem de linhas.
DataFrameGroupBy.countretorna a DataFrame, pois a contagem não nula pode diferir nas colunas do mesmo grupo. Para obter a contagem não nula em grupo para uma coluna específica, use df.groupby(...)['x'].count()onde "x" é a coluna a ser contada.
Exemplos de código mínimo
Abaixo, mostro exemplos de cada um dos métodos descritos na tabela acima. Primeiro, a configuração -
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
Conde linha de uma trama de dados: len(df), df.shape[0]oulen(df.index)
len(df)
# 5
df.shape[0]
# 5
len(df.index)
# 5
Parece tolice comparar o desempenho de operações de tempo constante, especialmente quando a diferença está no nível de "sério, não se preocupe com isso". Mas essa parece ser uma tendência com outras respostas, por isso estou fazendo o mesmo por completude.
Dos três métodos acima, len(df.index)(como mencionado em outras respostas), é o mais rápido.
Nota
- Todos os métodos acima são operações de tempo constante, pois são simples pesquisas de atributo.
df.shape(similar a ndarray.shape) é um atributo que retorna uma tupla de (# Rows, # Cols). Por exemplo, df.shaperetorna (8,
2)para o exemplo aqui.
Coluna Contagem de uma trama de dados: df.shape[1],len(df.columns)
df.shape[1]
# 2
len(df.columns)
# 2
Análogo a len(df.index), len(df.columns)é o mais rápido dos dois métodos (mas leva mais caracteres para digitar).
Contagem de linhas de uma série: len(s), s.size,len(s.index)
len(s)
# 5
s.size
# 5
len(s.index)
# 5
s.sizee len(s.index)são praticamente os mesmos em termos de velocidade. Mas eu recomendo len(df).
Note
size é um atributo e retorna o número de elementos (= contagem de linhas para qualquer série). Os DataFrames também definem um atributo de tamanho que retorna o mesmo resultado que df.shape[0] * df.shape[1].
Contagem de linhas não nulas: DataFrame.counteSeries.count
Os métodos descritos aqui contam apenas valores não nulos (significando que os NaNs são ignorados).
A chamada DataFrame.countretornará contagens não-NaN para cada coluna:
df.count()
A 5
B 3
dtype: int64
Para Série, use Series.countpara efeito semelhante:
s.count()
# 3
Contagem de linhas em grupo: GroupBy.size
Para DataFrames, use DataFrameGroupBy.sizepara contar o número de linhas por grupo.
df.groupby('A').size()
A
a 2
b 2
c 1
dtype: int64
Da mesma forma, para Series, você usará SeriesGroupBy.size.
s.groupby(df.A).size()
A
a 2
b 2
c 1
Name: B, dtype: int64
Nos dois casos, a Seriesé retornado. Isso faz sentido paraDataFrames , pois todos os grupos compartilham a mesma contagem de linhas.
Contagem de linhas não nulas em grupo: GroupBy.count
Semelhante ao anterior, mas use GroupBy.count, não GroupBy.size. Observe que sizesempre retorna a Series, while countretorna a Seriesse chamado em uma coluna específica, ou então a DataFrame.
Os seguintes métodos retornam a mesma coisa:
df.groupby('A')['B'].size()
df.groupby('A').size()
A
a 2
b 2
c 1
Name: B, dtype: int64
Enquanto isso, counttemos
df.groupby('A').count()
B
A
a 2
b 1
c 0
... chamou o objeto GroupBy inteiro, v / s,
df.groupby('A')['B'].count()
A
a 2
b 1
c 0
Name: B, dtype: int64
Chamado em uma coluna específica.