在IPython中如何获取指定类型且符合命名模式的本地变量列表?
获取trade_开头的DataFrame实例列表并批量添加列
嘿,这个需求我之前也碰到过!你已经通过dir()拿到了变量名字符列表,现在只需要把这些名字映射到实际的DataFrame实例就行,用Python的命名空间字典就能轻松搞定。
步骤1:获取DataFrame实例列表
globals()函数会返回当前全局命名空间的字典,键是变量名,值就是对应的变量对象。我们可以基于你已经写的列表推导式,直接从globals()里取出对应的DataFrame:
import pandas as pd # 获取所有以trade_开头的DataFrame实例(加类型判断避免误取) df_list = [globals()[var_name] for var_name in dir() if var_name.startswith('trade_') and isinstance(globals()[var_name], pd.DataFrame)]
这里加isinstance判断是为了保险——万一有其他以trade_开头的非DataFrame变量,不会被误加进来。
步骤2:给每个DataFrame批量添加列
拿到实例列表后,遍历它们就能批量操作了。比如我们给每个DataFrame加一列data_source,值对应它的变量名:
# 遍历变量名+实例,添加带变量标识的列 for var_name in [x for x in dir() if x.startswith('trade_') and isinstance(globals()[x], pd.DataFrame)]: df = globals()[var_name] df['data_source'] = var_name # 或者直接用之前的df_list,添加固定值的列 for df in df_list: df['new_column'] = 'default_value'
原理说明
IPython工作区里的变量都存在全局命名空间中,globals()就是这个空间的字典视图。通过变量名字符串作为键,就能直接拿到对应的DataFrame实例,而不是仅仅拿到名字字符串,这样就能对每个实例直接做修改了。
内容的提问来源于stack exchange,提问作者StayFoolish
相关产品推荐
相关产品推荐

