import pandas as pd
def test_run():
for symbol in ['nugt', 'soxs']:
for stat in ['max', 'min', 'mean']:
print(f"{stat} Close")
print(symbol, get_stat(symbol, stat))
def get_stat(symbol, stat):
df = pd.read_csv(f"{symbol}.csv")
return getattr(df['close'], stat())
if __name__ == "__main__":
test_run()
我正在尝试打开2个excel文件(soxs.csv和nugt.csv),查看列"关闭"并在"关闭"中找到最大值,最小值,平均值。每个文件的列。
我得到的结果是"TypeError: 'str' object is not callable"
。但是我用它来调用它的属性应该只是通过使用循环来减少代码。关于如何解决这个问题的任何建议?
答案 0 :(得分:0)
您正在调用stat
,这是以下行的字符串:
return getattr(df['close'], stat())
将其更改为:
return getattr(df['close'], stat)()
此外,为了一次访问多个属性,您可以简单地使用接受可迭代属性名称的operator.attrgetter
。
e.g。
attrs = ['max', 'min', 'mean']
result = [r() for r in attrgetter(*attrs)(df['close'])]
但在这种情况下,由于您需要再次调用getattr
结果,因此它不是使用operator.attrgetter()
的Pythonic方式。相反,你可以在attrs上循环,只需在列表理解中手动调用结果。
[getattr(df['close'], attr)() for attr in attrs]