частота появления элемента в списке python из файла - PullRequest
0 голосов
/ 01 августа 2020

Может кто мне поможет? Мне нужно написать функцию, которая возвращает словарь из таблицы, где ключи - это информация, такая как пол, возраст, местоположение, ответ на коронный тест и дата. Значения - это частота их появления в столбце таблицы.

[['N', '25-29', 'Eesti', 'Harju maakond', 'N', '06.03.2020'],
['N', '35-39', 'Eesti', 'Harju maakond', 'N', '06.03.2020'],
['N', '40-44', 'Eesti', 'Saare maakond', 'N', '06.03.2020'],
['N', '35-39', 'Eesti', 'Tartu maakond', 'N', '06.03.2020'],
['M', '40-44', 'Eesti', 'Harju maakond', 'N', '06.03.2020']]

это мой код:

def erinevused(faili_nimi, i):
with open(faili_nimi, encoding = "UTF-8") as fail:
    read = fail.read().split(";")
    sõnastik = {i: read.count(i) for i in read}
return sõnastik

дает все частоты

{'N': 6, '25-29': 1, 'Eesti': 5, 'Harju maakond': 3, '06.03.2020\nN': 3, '35-39': 2, '40-44': 2, 'Saare maakond': 1, 'Tartu maakond': 1, '06.03.2020\nM': 1, '06.03.2020': 1}

, но мне нужны только значения i, как здесь (я начинается с 1, а не с 0):

erinevused('andmed.txt', 2) 
{'25-29': 1, '35-39': 2, '40-44': 2}

итак, как получить частоту элемента в столбце?

1 Ответ

1 голос
/ 01 августа 2020

Вероятно, вы этого хотите.

Кроме того, я немного изменил вашу данную таблицу данных, так как имя местоположения, например Eesti, Harju maakond, является местоположением / местом. Кроме того, вы предоставили 5 заголовков, но 6 столбцов в данных, поэтому я должен это сделать. Вероятно, вам также придется изменить это в своем предыдущем коде, который генерирует эту таблицу, поскольку я думаю, это имя местоположения в Эстонии.

Всегда используйте Pandas для обработки столбцов data.

import pandas as pd # Pandas dataframe (install pandas using pip install pandas)


headers = ['sex', 'age', 'location', 'coronatestanswer', 'date']

datatable = [['N', '25-29', 'Eesti, Harju maakond', 'N', '06.03.2020'],
['N', '35-39', 'Eesti, Harju maakond', 'N', '06.03.2020'],
['N', '40-44', 'Eesti, Saare maakond', 'N', '06.03.2020'],
['N', '35-39', 'Eesti, Tartu maakond', 'N', '06.03.2020'],
['M', '40-44', 'Eesti, Harju maakond', 'N', '06.03.2020']]


df = pd.DataFrame(datatable, columns=headers) # Data frame created from given list of lists
print(df) # Take a look a the organized dataframe in pandas
print(df['age'].value_counts()) # Count frequency of elements in a column

Вывод для печати (df):

  sex    age              location coronatestanswer        date
0   N  25-29  Eesti, Harju maakond                N  06.03.2020
1   N  35-39  Eesti, Harju maakond                N  06.03.2020
2   N  40-44  Eesti, Saare maakond                N  06.03.2020
3   N  35-39  Eesti, Tartu maakond                N  06.03.2020
4   M  40-44  Eesti, Harju maakond                N  06.03.2020

Вывод для подсчета частоты:

35-39    2
40-44    2
25-29    1
Name: age, dtype: int64

Без использования Pandas это даже намного короче. Проблема в том, что если вы хотите, чтобы это было для каждого столбца, тогда код будет просто избыточным и ненужным повторением. Вот почему Pandas - это круто. Python делает задачу проще и эффективнее. :)

Но все равно. Вот код без Pandas

from collections import Counter # Now, Don't shout at me. This is standard library. No need to install anything.

age_list = [datatable[i][1] for i in range(1,len(datatable))] # This is called list comprehension.
print (Counter(age_list)).

Вывод:

Counter({'35-39': 2, '40-44': 2, '25-29': 1})

Счетчик - объект словаря. Если присвоить Counter(age_list) другой переменной. Вы можете получить доступ к частотам любой возрастной группы в любое время. Примерно так.

age_list = Counter([datatable[i][1] for i in range(1,len(datatable))])

print(age_list['40-44'])

Вывод: 2, конечно.

...