Python中如何保存globals()创建的动态变量并在后续循环中调用
实现方法
方案1:下载阶段直接存入字典(更推荐)
不需要通过globals()生成全局变量,直接用字典存储所有DataFrame,避免命名空间污染,后续调用也更方便,代码修改如下:
import pandas as pd import pandas_datareader.data as web start = "2019-01-01" end = "2020-01-01" assets = ["FB" , "AMZN" , "AAPL" , "NFLX" , "GOOG"] stock_dict = {} # 专门存储所有股票DataFrame的字典 for ticker in assets: try: stock_dict[ticker] = pd.DataFrame(web.DataReader(ticker, "yahoo", start, end)) # 如果要保留Stock_前缀的键,可以写成:stock_dict[f"Stock_{ticker}"] = ... except Exception as e: print(f"{ticker} 下载出错:{e}")
方案2:基于已生成的全局变量提取为字典
如果你已经运行了原有代码生成了Stock_FB这类全局变量,可以用如下方式批量收集到字典中:
stock_dict = {} for ticker in assets: var_name = f"Stock_{ticker}" if var_name in globals(): # 避免不存在的变量报错 stock_dict[ticker] = globals()[var_name]
循环调用DataFrame执行操作
拿到stock_dict之后,直接遍历字典的键值对就能批量处理所有数据,示例如下:
for ticker, df in stock_dict.items(): # 以下为自定义操作示例,可替换为你需要的逻辑 print(f"========== {ticker} 数据概览 ==========") print(df.describe()) # 示例:计算收盘价均值 close_mean = df['Close'].mean() print(f"{ticker} 区间收盘价均值:{round(close_mean, 2)}") # 示例:导出为单独的csv文件 df.to_csv(f"{ticker}_2019行情.csv")
小提示:你原有代码的
except块中break写在了print("Error")前面,会导致出错时永远不会打印错误提示,建议调整顺序,而且不推荐直接用裸except,最好捕获具体异常或者打印异常信息方便排查问题。
内容的提问来源于stack exchange,提问作者janreimann
相关产品推荐
相关产品推荐

