Python - Нахождение среднего значения в параллельных словарях - PullRequest
0 голосов
/ 09 октября 2018

Итак, у меня есть несколько файлов данных .csv, которые я должен очистить.Пример одной из строк данных:

u[i] = {'age': '44', 'salary': '117681.0', 'suburb': None, 'language': 'English'}

Я отфильтровал данные, которые мне не нужны, и возвратил несколько строк соответствующих словарей.например:

{'age': '44', 'salary': '117681.0', 'suburb': None}
{'age': '34', 'salary': '56456.0', 'suburb': 'Frankston'}
{'age': '37', 'salary': '59370.0', 'suburb': 'Richmond'}
{'age': '44', 'salary': '91399.0', 'suburb': 'Collingwood'}
{'age': '36', 'salary': '74437.0', 'suburb': 'Toorak'}
{'age': '41', 'salary': '89121.0', 'suburb': 'Frankston'}

Теперь я хочу суммировать зарплату в каждом из этих словарей, чтобы найти среднюю зарплату, но я не могу понять это за свою жизнь.

Я пытался выделить только значения зарплаты и использовать счетчики, но, похоже, я не могу заставить это работать.Я также попытался создать списки, через которые я могу проходить, но я не могу получить все значения в одном списке.Проблема для меня заключается в том, что когда я изолирую значения, они представляют собой параллельные значения / списки, и я не знаю, как с этим работать.

Буду очень признателен за любую помощь, это сводит меня с ума!Спасибо!

Вот мой код, но на данный момент у меня нет ничего заслуживающего внимания:

def average_salary(data, lower_age, upper_age): 
    u = dict(sorted(data_cleaned.items()))
    count = 0  

    for i in u:
        age = u[i]['age']
        sal = u[i]['salary']
        tally = 0

        if age is not None and sal is not None and lower_age < float(age) < upper_age:
            tally += float(u[i]['salary'])
            print(u[i]['salary'])

Ответы [ 4 ]

0 голосов
/ 09 октября 2018

Предполагая, что у вас установлены панды, вы можете сделать это или установить, используя pip install pandas, или использовать установку, используя anaconda

import pandas as pd
a=[{'age': '44', 'salary': '117681.0', 'suburb': None},
{'age': '34', 'salary': '56456.0', 'suburb': 'Frankston'},
{'age': '37', 'salary': '59370.0', 'suburb': 'Richmond'},
{'age': '44', 'salary': '91399.0', 'suburb': 'Collingwood'},
{'age': '36', 'salary': '74437.0', 'suburb': 'Toorak'},
{'age': '41', 'salary': '89121.0', 'suburb': 'Frankston'}]
df=pd.DataFrame(a)
df['salary']=pd.to_numeric(df['salary'],errors='coerce')
df['age']=pd.to_numeric(df['age'],errors='coerce')
print(df['salary'].mean())
print(df['age'].mean())

Выход

81410.66666666667
39.333333333333336
0 голосов
/ 09 октября 2018

предполагается, что вы попали в список:

i = [{'age': '44', 'salary': '117681.0', 'suburb': None},
{'age': '34', 'salary': '56456.0', 'suburb': 'Frankston'},
{'age': '37', 'salary': '59370.0', 'suburb': 'Richmond'},
{'age': '44', 'salary': '91399.0', 'suburb': 'Collingwood'},
{'age': '36', 'salary': '74437.0', 'suburb': 'Toorak'},
{'age': '41', 'salary': '89121.0', 'suburb': 'Frankston'}]

age_avg = sum(int(item["age"]) for item in i) / len(i)
salary_avg = sum(float(item["salary"]) for item in i) / len(i)

print (age_avg, salary_avg)

Результат:

39.333333333333336 81410.66666666667
0 голосов
/ 09 октября 2018

Я предлагаю также решение, подобное этому:

#!/usr/bin/env ipython
import numpy as np

u=[];
u.append({'age': '44', 'salary': '117681.0', 'suburb': None})
u.append({'age': '34', 'salary': '56456.0', 'suburb': 'Frankston'})
u.append({'age': '37', 'salary': '59370.0', 'suburb': 'Richmond'})
u.append({'age': '44', 'salary': '91399.0', 'suburb': 'Collingwood'})
u.append({'age': '36', 'salary': '74437.0', 'suburb': 'Toorak'})
u.append({'age': '41', 'salary': '89121.0', 'suburb': 'Frankston'})
# ------------------------------------------------------------------
def avg_salary(data,lower_age,upper_age):
    salaries = [float(val['salary']) for val in u if float(val['age'])>lower_age and float(val['age'])<upper_age];
    return sum(salaries)/len(salaries)
# -------------------------------------------------------------------
print avg_salary(u,5,65)
0 голосов
/ 09 октября 2018

Соберите зарплату в списке

salaries = [float(my_dict['salary']) for my_dict in my_dicts]
average = sum(salaries) / len(salaries)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...