Contar coisas parece meio bobo até que os resultados pareçam um pouco — ou muito — errados. Já vi verificações de frequência feitas com chamadas repetidas de list.count() ou métodos pandas mal utilizados que ignoram silenciosamente valores ausentes. O resultado: código lento e números errados. A solução é usar a ferramenta certa para o trabalho: collections.Counter para mapas de frequência, count() integrado para consultas rápidas de valor único e value_counts() do pandas quando você estiver em um DataFrame.
O que é o Counter e como funciona
collections.Counter é uma subclasse do dicionário para contar objetos hashable (um multiconjunto). Você pode criar um objeto " Counter " a partir de um iterável ou um mapeamento. As chaves ausentes são padronizadas como 0; as contagens podem ser incrementadas ou decrementadas; e vários métodos convenientes tornam as tarefas comuns mais simples.
from collections import Counter
# From an iterable (one pass over the data)
nyc_eatery_types =["Mobile Food Truck","Food Cart","Snack Bar","Restaurant","Food Cart","Restaurant","Mobile Food Truck","Snack Bar","Mobile Food Truck"]
eatery_type_counts = Counter(nyc_eatery_types)print(eatery_type_counts)# dict-like viewprint(eatery_type_counts["Restaurant"])# missing keys return 0 instead of KeyErrorprint(eatery_type_counts["Kiosk"])Tecnologia
Não confie na ordem de iteração de um ` Counter`. Quando você precisar de uma visualização classificada, use most_common().
Descubra os valores mais comuns com most_common()
Counter.most_common(n) retorna uma lista de pares de valores e chaves ( (item, count) ) em ordem decrescente de contagem. Use n para limitar o resultado ou deixe de fora para pegar todos os pares.
Se uma contagem cair para 0 ou menos, métodos como elements() e most_common() vão ignorá-la. Para remover uma chave completamente, use del counter[key].
calcular totais e top-N
A partir do Python 3.10, Counter.total() mostra a soma de todas as contagens. Isso é útil quando você precisa de proporções ou divisões.
elements() retorna cada elemento tantas vezes quanto sua contagem. A ordem é meio aleatória.
expanded =list(eatery_type_counts.elements())print(len(expanded),"items reconstructed from counts")Tecnologia
use operações matemáticas e de conjuntos
Você pode juntar contadores com operações aritméticas e do tipo mínimo/máximo. Os resultados não incluem contagens zero e negativas.
from collections import Counter
a = Counter({"Food Cart":5,"Restaurant":2})
b = Counter({"Food Cart":3,"Snack Bar":4})print(a + b)# add countsprint(a - b)# subtract (keeps positives only)print(a & b)# intersection: min of countsprint(a | b)# union: max of countsTecnologia
Escolha a ferramenta mais simples que atenda às suas necessidades e restrições de desempenho.
verificações de valor único com count()
Use o método integrado ` count() ` quando você só precisa saber quantas vezes um valor aparece numa sequência ou contar quantas subcadeias não sobrepostas existem numa string.
numbers =[1,2,2,3,2]print(numbers.count(2))# 3
word ="banana"print(word.count("a"))# 3
text ="aaa"print(text.count("aa"))# 1: non-overlapping matches onlyprint("cat".count(""))# 4: empty string counts len(s)+1 positionsTecnologia
Cuidado com booleanos e inteiros: True == 1 e False == 0. Isso pode aumentar as contagens se você misturar tipos.
mixed =[1,True,0,False,True]print(mixed.count(1))# 3 (counts 1 and True)print(mixed.count(0))# 2 (counts 0 and False)Tecnologia
Evite chamar repetidamente o método ` count() ` dentro de loops em grandes volumes de dados; cada chamada verifica toda a sequência.
# Inefficient: O(n^2) for large lists# freq = {x: numbers.count(x) for x in numbers}# Efficient: one passfrom collections import Counter
freq = Counter(numbers)Tecnologia
várias frequências com contador
Quando você precisar de contagens para muitos valores únicos, crie uma tabela de contagem ( Counter ) uma vez e consulte-a conforme necessário. É claro, rápido e feito pra esse tipo de situação.
dados tabulares com pandas
Nos pandas, DataFrame.count() e Series.count() calculam contagens sem faltas. Para obter uma tabela de frequência de valores, use Series.value_counts().
import pandas as pd
df = pd.DataFrame({"line":["A","A","B",None,"B","B"],"ridership":[100,None,120,130,None,150],})print(df["line"].count())# 5 (non-missing)print(df["line"].value_counts())# value frequencies# For full row count, use len(df), not df.count()print(len(df))# 6Tecnologia
Valide e limpe os dados com o Counter
Antes da análise, eu verifico a consistência categórica, valores inesperados e duplicatas. O Counter torna essas verificações rápidas e repetíveis.
from collections import Counter
# Example: validate allowed categories
allowed_types ={"Mobile Food Truck","Food Cart","Snack Bar","Restaurant"}
type_counts = Counter(nyc_eatery_types)
unexpected ={t: c for t, c in type_counts.items()if t notin allowed_types}if unexpected:print("Unexpected categories found:", unexpected)# Example: flag duplicates (e.g., station IDs appearing more than once)
station_ids =["ST-001","ST-002","ST-003","ST-002","ST-004","ST-002"]
dup_counts = Counter(station_ids)
duplicates =[sid for sid, c in dup_counts.items()if c >1]print("Duplicate station IDs:", duplicates)Tecnologia
Dicas práticas e erros comuns
Esses detalhes economizam tempo e evitam erros sutis.
Counter é tipo um dicionário: chaves que não existem devolvem 0; use del counter[key] para remover entradas. Evite guardar zeros, a menos que você precise deles temporariamente.
Não confie na ordem de iteração. Use most_common() para obter resultados classificados.
str.count() conta correspondências que não se sobrepõem. Para contagens de subcadeias sobrepostas, use re.finditer().
Evite chamar várias vezes o método ` list.count() ` na mesma sequência grande. Em vez disso, crie um Counter.
No pandas, .count() é pra contagens sem faltas; usa .value_counts() pra frequências de valores.
Padrões mínimos nos quais confio
Esses são os trechos que eu uso mais na produção e no ensino.
Mapa de frequência de uma passagem: Counter(iterable)
Categorias Top-N: Counter(data).most_common(n)
Atualizações incrementais: counter.update(batch) ou counter.subtract(batch)
Verificação de valor único: sequence.count(x) (evite em loops)
collections.Counter é a ferramenta certa para contar vários valores de forma rápida e clara. Use ocount() integrado para verificações pontuais, o Counter para mapas de frequência e análise top-N, e o Series.value_counts() quando estiver trabalhando com pandas. Fique de olho nos casos extremos de contagem de strings, equivalência booleana-inteira e a diferença entre contagens sem ausências e frequências de valores. Com esses padrões, suas contagens serão rápidas e corretas.
Aumente o nível de suas habilidades em Python com estes cinco desafios de codificação em Python. Faça um teste para ver se você consegue completar um em uma semana!
Aprenda a dividir listas Python com técnicas como slicing, compreensão de listas e itertools. Descubra quando usar cada método para um tratamento ideal dos dados.
Mergulhe na ciência de dados com Python para analisar e visualizar seus dados de forma eficaz. Não precisa ter experiência ou conhecimento em programação.
Contar coisas parece meio bobo até que os resultados pareçam um pouco — ou muito — errados. Já vi verificações de frequência feitas com chamadas repetidas de
list.count()ou métodos pandas mal utilizados que ignoram silenciosamente valores ausentes. O resultado: código lento e números errados. A solução é usar a ferramenta certa para o trabalho:collections.Counterpara mapas de frequência,count()integrado para consultas rápidas de valor único evalue_counts()do pandas quando você estiver em um DataFrame.O que é o Counter e como funciona
collections.Counteré uma subclasse do dicionário para contar objetos hashable (um multiconjunto). Você pode criar um objeto "Counter" a partir de um iterável ou um mapeamento. As chaves ausentes são padronizadas como 0; as contagens podem ser incrementadas ou decrementadas; e vários métodos convenientes tornam as tarefas comuns mais simples.Não confie na ordem de iteração de um `
Counter`. Quando você precisar de uma visualização classificada, usemost_common().Descubra os valores mais comuns com most_common()
Counter.most_common(n)retorna uma lista de pares de valores e chaves ((item, count)) em ordem decrescente de contagem. Usenpara limitar o resultado ou deixe de fora para pegar todos os pares.Use isso quando precisar de análises de frequência, tabelas de classificação ou verificações rápidas de sanidade em dados categóricos.
Faça mais com o Counter
atualizar e subtrair contagens
Os dados comerciais mudam.
update()aumenta as contagens, enquantosubtract()as reduz. Ambos aceitam iteráveis ou mapeamentos.Se uma contagem cair para 0 ou menos, métodos como
elements()emost_common()vão ignorá-la. Para remover uma chave completamente, usedel counter[key].calcular totais e top-N
A partir do Python 3.10,
Counter.total()mostra a soma de todas as contagens. Isso é útil quando você precisa de proporções ou divisões.reconstrua sequências com elements()
elements()retorna cada elemento tantas vezes quanto sua contagem. A ordem é meio aleatória.use operações matemáticas e de conjuntos
Você pode juntar contadores com operações aritméticas e do tipo mínimo/máximo. Os resultados não incluem contagens zero e negativas.
Quando usar list.count(), Counter ou pandas
Escolha a ferramenta mais simples que atenda às suas necessidades e restrições de desempenho.
verificações de valor único com count()
Use o método integrado `
count()` quando você só precisa saber quantas vezes um valor aparece numa sequência ou contar quantas subcadeias não sobrepostas existem numa string.Cuidado com booleanos e inteiros:
True == 1eFalse == 0. Isso pode aumentar as contagens se você misturar tipos.Evite chamar repetidamente o método `
count()` dentro de loops em grandes volumes de dados; cada chamada verifica toda a sequência.várias frequências com contador
Quando você precisar de contagens para muitos valores únicos, crie uma tabela de contagem (
Counter) uma vez e consulte-a conforme necessário. É claro, rápido e feito pra esse tipo de situação.dados tabulares com pandas
Nos pandas,
DataFrame.count()eSeries.count()calculam contagens sem faltas. Para obter uma tabela de frequência de valores, useSeries.value_counts().Valide e limpe os dados com o Counter
Antes da análise, eu verifico a consistência categórica, valores inesperados e duplicatas. O
Countertorna essas verificações rápidas e repetíveis.Dicas práticas e erros comuns
Esses detalhes economizam tempo e evitam erros sutis.
Counteré tipo um dicionário: chaves que não existem devolvem 0; usedel counter[key]para remover entradas. Evite guardar zeros, a menos que você precise deles temporariamente.most_common()para obter resultados classificados.str.count()conta correspondências que não se sobrepõem. Para contagens de subcadeias sobrepostas, usere.finditer().list.count()` na mesma sequência grande. Em vez disso, crie umCounter..count()é pra contagens sem faltas; usa.value_counts()pra frequências de valores.Padrões mínimos nos quais confio
Esses são os trechos que eu uso mais na produção e no ensino.
Counter(iterable)Counter(data).most_common(n)counter.update(batch)oucounter.subtract(batch)sequence.count(x)(evite em loops)df["col"].value_counts()(nãodf.count())Conclusão
collections.Counteré a ferramenta certa para contar vários valores de forma rápida e clara. Use ocount()integrado para verificações pontuais, oCounterpara mapas de frequência e análise top-N, e oSeries.value_counts()quando estiver trabalhando com pandas. Fique de olho nos casos extremos de contagem de strings, equivalência booleana-inteira e a diferença entre contagens sem ausências e frequências de valores. Com esses padrões, suas contagens serão rápidas e corretas.