Estou tentando obter o número de linhas do dataframe df com o Pandas, e aqui está o meu código.
Método 1:
total_rows = df.count
print total_rows +1
Método 2:
total_rows = df['First_columnn_label'].count
print total_rows +1
Ambos os trechos de código me dão este erro:
TypeError: tipo (s) de operando não suportado para +: 'instancemethod' e 'int'
O que estou fazendo errado?
df.count()
retornará apenas a contagem de linhas não NA / NaN para cada coluna. Você deve usardf.shape[0]
, que sempre informará corretamente o número de linhas.Respostas:
Você pode usar a
.shape
propriedade ou apenaslen(DataFrame.index)
. No entanto, existem diferenças notáveis de desempenho (len(DataFrame.index)
é mais rápido):EDIT: Como @Dan Allen observou nos comentários
len(df.index)
edf[0].count()
não é intercambiável, poiscount
excluiNaN
s,fonte
shape
no trabalho interativo, em vez de len (df): Para experimentar filtros diferentes, muitas vezes preciso saber quantos itens restam. Com a forma, posso ver isso apenas adicionando .shape após minha filtragem. Com len (), a edição da linha de comando se torna muito mais complicada, indo e voltando.df.empty
é a melhor opção.df.shape[0]
mais rápido quelen(df)
oulen(df.columns)
? Desde 1 ns (nanossegundos) = 1000 uS (microssegundo), portanto 1.17μs = 1170ns, o que significa que é cerca de 3 vezes mais lenta do que 381nsSuponha que
df
seu dataframe seja:Ou, mais sucintamente,
fonte
Use
len(df)
. Isso funciona a partir dos pandas 0.11 ou talvez até mais cedo.__len__()
está atualmente (0,12) documentado comReturns length of index
. Informações de tempo, configuradas da mesma maneira que na resposta raiz:Devido a uma chamada de função adicional, é um pouco mais lenta que a chamada
len(df.index)
direta, mas isso não deve desempenhar nenhum papel na maioria dos casos de uso.fonte
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).
Exemplos de código mínimo
Abaixo, mostro exemplos de cada um dos métodos descritos na tabela acima. Primeiro, a configuração -
Conde linha de uma trama de dados:
len(df)
,df.shape[0]
oulen(df.index)
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.Coluna Contagem de uma trama de dados:
df.shape[1]
,len(df.columns)
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)
s.size
elen(s.index)
são praticamente os mesmos em termos de velocidade. Mas eu recomendolen(df)
.Contagem de linhas não nulas:
DataFrame.count
eSeries.count
Os métodos descritos aqui contam apenas valores não nulos (significando que os NaNs são ignorados).
A chamada
DataFrame.count
retornará contagens não-NaN para cada coluna:Para Série, use
Series.count
para efeito semelhante:Contagem de linhas em grupo:
GroupBy.size
Para
DataFrames
, useDataFrameGroupBy.size
para contar o número de linhas por grupo.Da mesma forma, para
Series
, você usaráSeriesGroupBy.size
.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ãoGroupBy.size
. Observe quesize
sempre retorna aSeries
, whilecount
retorna aSeries
se chamado em uma coluna específica, ou então aDataFrame
.Os seguintes métodos retornam a mesma coisa:
Enquanto isso,
count
temos... chamou o objeto GroupBy inteiro, v / s,
Chamado em uma coluna específica.
fonte
TL; DR
usar
len(df)
len()
é seu amigo, ele pode ser usado para contagens de linhas comolen(df)
.Como alternativa, você pode acessar todas as linhas por
df.index
e todas as colunas pordf.columns
e, como você pode usarlen(anyList)
para obter a contagem da lista, uselen(df.index)
para obter o número de linhas elen(df.columns)
para a contagem de colunas.Ou, você pode usar
df.shape
que retorna o número de linhas e colunas em conjunto, se você deseja acessar o número de linhas só usamdf.shape[0]
e para o número de colunas só usar:df.shape[1]
.fonte
Além das respostas acima, use pode usar
df.axes
para obter a tupla com índices de linha e coluna e, em seguida, usar alen()
função:fonte
... baseado na resposta de Jan-Philip Gehrcke.
A razão pela qual
len(df)
oulen(df.index)
é mais rápido quedf.shape[0]
. Veja o código. df.shape é@property
aquele que executa um método DataFrame chamandolen
duas vezes.E sob o capô de len (df)
len(df.index)
será um pouco mais rápido do quelen(df)
uma vez que tem uma chamada de função a menos, mas isso é sempre mais rápido quedf.shape[0]
fonte
Chego aos pandas de
R
fundo e vejo que os pandas são mais complicados quando se trata de selecionar linha ou coluna. Eu tive que lutar com isso por um tempo, depois encontrei algumas maneiras de lidar com:obtendo o número de colunas:
obtendo o número de linhas:
fonte
df.shape
. Retorna o número de linhas e colunas, respectivamente.Caso deseje obter a contagem de linhas no meio de uma operação encadeada, você pode usar:
Exemplo:
Isso pode ser útil se você não quiser colocar uma declaração longa dentro de um
len()
função.Você poderia usar,
__len__()
mas__len__()
parece um pouco estranho.fonte
count = len(df.reset_index())
do quecount = df.reset_index().pipe(len)
. O primeiro é apenas uma pesquisa de atributo sem a chamada de função.Ei, você pode usar faça isso também:
Digamos que
df
seja seu quadro de dados. Em seguida,df.shape
fornece a forma do seu quadro de dados, ou seja,(row,col)
Portanto, atribua o comando abaixo para obter as informações necessárias
fonte
Para dataframe df, uma contagem de linhas no formato de vírgula impressa usada ao explorar dados:
Exemplo:
fonte
Um método alternativo para descobrir a quantidade de linhas em um dataframe que eu acho que é a variante mais legível
pandas.Index.size
.Observe que, como eu comentei a resposta aceita:
fonte
Não tenho certeza se isso funcionaria (os dados poderiam ser omitidos), mas isso pode funcionar:
e, usando isso, você pode encontrar o número de linhas executando o snippet de código e observando o número da linha que foi fornecido a você.
fonte
Isso pode ser feito (
df
é o nome do DataFrame):Método 1: Usando a
len
função:len(df)
fornecerá o número de linhas em um DataFrame chamadodf
.Método 2: usando a
count
função:df[col].count()
contará o número de linhas em uma determinada colunacol
.df.count()
dará o número de linhas para todas as colunas.fonte