Как подсчитать частоту появления элементов в списке в python?

#python #loops #count

Вопрос:

У меня есть список стран, которые были извлечены из двух столбцов файла Excel. В одном из столбцов есть пустые строки. Таким образом, список содержит названия стран и пустые строки.

Например mylist=["Norway", "Brazil", "Ireland", "Scotland", "nan", "nan", "Canada"]

Как мне выполнить итерацию по списку и распечатать частоту встречаемости каждой страны в списке, а также пропустить пустые файлы?

Я пытался до сих пор:

 countries=[]
for column in survey ['C1']:
    countries.append(column)

for column in survey['C2']:
    countries.append(column)

c=0
for i in countries:
    c =1
    print(c)
 

С помощью этого кода я получаю ошибку:

 ---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-46-08f5eb58f7cb> in <module>()
      1 c=0
      2 for c in countries:
----> 3     c =1
      4     print(c)
      5 

TypeError: must be str, not int
 

Комментарии:

1. Пожалуйста, запустите тот же код. В своем неправильном коде вы использовали for c in countries

Ответ №1:

Попробуйте с Counter :

 from collections import Counter

mylist=["Norway", "Brazil", "Ireland", "Scotland", "nan", "nan", "Canada"]

>>> Counter([i for i in mylist if i!="nan"])
Counter({'Norway': 1, 'Brazil': 1, 'Ireland': 1, 'Scotland': 1, 'Canada': 1})
 
Редактировать:

Если ваш список содержит фактические nan значения (т. Е. не строку «nan»), вы можете использовать:

 >>> Counter([i for i in mylist if not pd.isnull(i)])
 

Ответ №2:

попробуйте это:

 mylist=["Norway", "Brazil", "Ireland", "Scotland", "nan", "nan", "Canada"]
{con : mylist.count(con) for con in set(mylist) if con != "nan"}
 

Выход:

 {'Norway': 1, 'Brazil': 1, 'Ireland': 1, 'Scotland': 1, 'Canada': 1}
 

Комментарии:

1. Лучше set не использовать list . {con : mylist.count(con) for con in set(mylist) if con != "nan"}

2. @dimay спасибо за ваш комментарий, я отредактирую свой ответ

Ответ №3:

вы можете попробовать более родной способ

 mylist=["Norway", "Brazil", "Ireland", "Scotland", "nan", "nan", "Canada"]
count = {}

for item in mylist:
    if item != "nan":
        if item in count:
            count[item]  = 1
        else:
            count[item] = 1