Удалить элементы по типу из списков во вложенном списке - PullRequest
1 голос
/ 24 марта 2020

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

def display_averages(input_list):
    print (input_list) #This is here to see that the input list is correctly nested. Will be removed once the code works
    for i in input_list: #This should be the bit that removes all strings, but doesn't
        if type(i) is str:
                    input_list.remove(i)
    temp = (sum(i) for i in zip(*input_list))
    fin = []
    for l in temp:
        fin.append(l / len(input_list))
    print("MDL: Mean-",fin[0])
    print("SPT: Mean-",fin[1])
    print("HRP: Mean-",fin[2])
    print("SDC: Mean-",fin[3])
    print("LTK: Mean-",fin[4])
    print("2MR: Mean-",fin[5])

Ввод будет выглядеть следующим образом:

temp_data = [['FIRSTNAME', 'LASTNAME', 'CATEGORY', 0, 20, 50, 0, 30, 90]]
temp_data.append(['FIRSTNAME', 'LASTNAME', 'CATEGORY', 100, 80, 100, 50, 90, 100])
display_averages(temp_data)

Желаемый результат будет:

MDL: Mean- 50.0
SPT: Mean- 50.0
HRP: Mean- 75.0
SDC: Mean- 25.0
LTK: Mean- 60.0
2MR: Mean- 95.0

Ответы [ 2 ]

0 голосов
/ 24 марта 2020

Вы можете использовать пакет numpy для обработки 2d-массива (списка списков), который также предоставляет вам приятные функции, такие как mean.

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

import numpy as np

arr = np.array(temp_data)
info = { "MDL": 3, "SPT": 4, "HRP": 5, "SDC": 6, "LTK": 7, "2MR": 8 } # Temp dict stores respective key-column

for k, v in info.items():
    info[k] = arr[:, v].astype(float).mean()
    print(f"{k}: Mean-", info[k])

ВЫХОД:

MDL: Mean- 50.0
SPT: Mean- 50.0
HRP: Mean- 75.0
SDC: Mean- 25.0
LTK: Mean- 60.0
2MR: Mean- 95.0
0 голосов
/ 24 марта 2020

Учитывая, что первые три элемента являются строками, а остальные шесть являются числами,
следующее даст вам список средних значений:

print([sum(l[3:]) / 6 for l in temp_data])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...