如何通过循环结合f-string调用DataFrame方法?代码传参问题咨询
修复Python函数参数传递与动态方法调用问题
你遇到的问题主要有两个核心点:一是test_run函数调用get_stat时没传递stat参数,二是动态调用pandas统计方法的写法有误(.f"{stat}"()这种语法在Python里是无效的)。咱们一步步来修正:
第一步:修正动态调用pandas方法的写法
要根据字符串动态调用pandas Series的方法(比如max()、min()、mean()),不能直接把字符串拼在点后面,应该用getattr()函数来获取对应方法对象,再执行调用:
def get_stat(symbol, stat): df = pd.read_csv(f"{symbol}.csv") # 用getattr获取指定的统计方法,然后执行调用 return getattr(df['close'], stat)()
第二步:在test_run中传递stat参数
原来的get_stat(symbol)缺少了stat参数,补上之后才能让get_stat知道当前要计算哪种统计值:
def test_run(): for symbol in ['nugt', 'soxs']: for stat in ['max','min', 'mean']: print(f"{stat} Close") # 把循环中的stat参数传递给get_stat print(symbol, get_stat(symbol, stat))
完整修正后的代码
import pandas as pd def get_stat(symbol, stat): df = pd.read_csv(f"{symbol}.csv") # 通过getattr动态获取并调用统计方法 return getattr(df['close'], stat)() def test_run(): for symbol in ['nugt', 'soxs']: for stat in ['max','min', 'mean']: print(f"{stat} Close") # 传入stat参数 print(symbol, get_stat(symbol, stat)) if __name__ == "__main__": test_run()
改动说明
getattr(obj, method_name)是Python动态获取对象属性/方法的标准方式,它能根据字符串method_name拿到对象obj对应的方法,完美适配咱们需要动态切换统计方法的场景,比字符串拼接写法更规范安全。- 补上
stat参数后,循环里的统计方法名能准确传递给get_stat,输出顺序和内容就完全符合你的预期了。
运行这段代码后,就会按照你想要的格式,依次输出两只股票的最大、最小、平均收盘价啦~
内容的提问来源于stack exchange,提问作者EMZ
相关产品推荐
相关产品推荐

