#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