Я пытаюсь создать код, который выводит те же результаты, что и description() панд.
Я хочу создать цикл внутри списка значений словаря, чтобы перебирать функции: mean, std,...
И если вы хотите отфильтровать df, чтобы делать это только для целочисленных столбцов, сначала используйте df.select_dtypes()
Кроме того, если вы хотите передать список произвольных или определяемых пользователем функций, аргумент [.aggregate()](https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.aggregate.html) allows that: its
func` может быть одной функцией/именем, списком или словарем. Так что на самом деле я не вижу никаких законных причин, чтобы изобретать это заново.
Используйте pandas для вычисления ваших значений, потом преобразуйте в dict:
# example input
# df = pd.DataFrame(np.random.random(size=(5,5)), columns=list('ABCDE'))
# example with count/mean/std, add all the functions you need in the list
df.agg(['count', 'mean', 'std']).to_dict('list')
пример:
{'A': [5.0, 0.5033497591814908, 0.25537079639738725],
'B': [5.0, 0.4311195890311792, 0.238291507402266],
'C': [5.0, 0.394948910648723, 0.2937879884789999],
'D': [5.0, 0.5694092003851056, 0.2733118347996942],
'E': [5.0, 0.6275597155186036, 0.17523941542284563]}
или как указал @smci, если хотите настроить describe
:
df.select_dtypes('number').describe(percentiles=[0.25,0.5,0.75]).to_dict('list')
Идея состоит в том, чтобы сохранить функцию в массиве. Убедитесь, что вы не вызываете скобки functions => НЕТ.
import pandas as pd
import numpy as np
funcs = [np.mean, np.sum]
df = pd.DataFrame({"col": [4, 5]})
for func in funcs:
print(df["col"].aggregate(func))
Можете ли вы объяснить почему вы пытаетесь заново изобрести панд вручную
df.describe()
в пандах? Является ли это домашнее задание учебным упражнением из-за успеваемости, любопытства или почему? В противном случае его не нужно переписывать, и вы можете настроить его процентили с помощью аргумента спискаpercentiles
.