如何根据作物字符串列表动态生成对应DataFrame变量的列表?
动态生成作物DataFrame变量列表的实现方法
场景说明
现有作物字符串列表:
crop_list = ['Cotton','Ragi', 'Groundnut', 'Sugarcane', 'Redgram', 'Sunflower', 'Paddy', 'Maize','Jowar']
已通过vars()循环为每个作物创建了对应DataFrame变量:
for a in crop_list: vars()[a] = Data[Data['Crop']== a]
需要动态生成这些DataFrame变量的列表(无需手动逐个输入变量名),用于后续数据合并,目标是得到类似new_crop_list = [Cotton,Ragi, Groundnut, Sugarcane, Redgram, Sunflower, Paddy,Maize,Jowar]的无引号变量列表。
解决方案
方法1:从命名空间直接提取(适配现有代码)
利用vars()或globals()直接从当前命名空间中提取已创建的DataFrame变量,通过列表推导式动态生成目标列表:
# 从vars()中提取对应变量生成列表 new_crop_list = [vars()[crop] for crop in crop_list] # 若变量在全局命名空间,也可使用globals() # new_crop_list = [globals()[crop] for crop in crop_list]
执行后new_crop_list即为所需的DataFrame变量列表,可直接用于合并操作。
方法2:优化初始流程(更推荐)
在创建DataFrame的同时直接生成列表,避免事后从命名空间查找,效率更高且不易出错:
# 一步生成列表,同时保留单个变量(若需要) new_crop_list = [] for crop in crop_list: df = Data[Data['Crop'] == crop] vars()[crop] = df # 保留原单个变量的需求 new_crop_list.append(df) # 或用列表推导式简化(若不需要保留单个变量) # new_crop_list = [Data[Data['Crop'] == crop] for crop in crop_list]
后续合并使用示例
from functools import reduce import pandas as pd df_merged = reduce(lambda a,b: pd.merge(a,b, on='Year'), new_crop_list)
内容的提问来源于stack exchange,提问作者Manojkumar Patil
相关产品推荐
相关产品推荐

