You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何根据作物字符串列表动态生成对应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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 19:01:20