我试图编写一个函数,返回数据集的平均值、中值、标准差、最大值和最小值。
下面是我的代码:它应该遍历“op”数组中的每个项,并将它们传递到"statSummary“函数中。
该函数将列表作为操作类型(例如平均值/中位数),执行操作(计算平均值)并打印结果。
def statSummary(dataset,operation):
operation = []
operation.append(df[dataset].operation())
return print(operation)
#load dataset
df = pd.read_csv('dataset.csv')
columnNames = list(df.columns)
ops = ["mean","median","std","max","min"]
for i in ops:
statSummary(columnNames,i)但是,当试图运行此程序时,我会收到以下错误:
AttributeError Traceback (most recent call last)
~\AppData\Local\Temp/ipykernel_8416/4291564190.py in <module>
30
31 for i in ops:
---> 32 statSummary(columnNames,i)
33
34
~\AppData\Local\Temp/ipykernel_8416/4291564190.py in statSummary(dataset, operation)
18 def statSummary(dataset,operation):
19 operation = []
---> 20 operation.append(df[dataset].operation())
21
22 return print(operation)
~\anaconda3\lib\site-packages\pandas\core\generic.py in __getattr__(self, name)
5485 ):
5486 return self[name]
-> 5487 return object.__getattribute__(self, name)
5488
5489 def __setattr__(self, name: str, value) -> None:
AttributeError: 'DataFrame' object has no attribute 'operation'这个错误似乎是由于这行中的“.operation()”造成的。
operation.append(df[dataset].operation())我想‘插入’操作变量到这一行,以便我可以迭代我的‘操作’列表使用‘平均数’,‘中位数’,std‘等。
这个是可能的吗?
发布于 2022-02-06 19:51:44
你在找getattr。
def statSummary(dataset, operation):
func = getattr(df[dataset], operation)
return func() # if `operation` is `"sum"`, this is equivalent to `df[dataset].sum()`.发布于 2022-02-06 20:09:42
如果您只想打印出这些内容,只需使用df.describe()即可。也可以使用numpy应用筛选方法。我给出了这方面的示例。否则,您可以使用getattr作为@AKX的回答。
import pandas as pd
import numpy as np
df = pd.DataFrame({
'one':np.array([1,2,3,4,5]),
'two':np.array([2,4,6,8,10]),
})
def statSummary(dataset,ops):
operation = []
operation.append(df[dataset].apply(ops))
return print(operation)
columnNames = list(df.columns)
ops = [np.mean,np.median,np.std,np.max,np.min]
for i in ops:
statSummary(columnNames,i)https://stackoverflow.com/questions/71011031
复制相似问题