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

如何动态为pandas DataFrame指定变量名并修复现有赋值代码

问题原因

原代码的核心错误是:在f字符串中直接嵌入pandas DataFrame实例时,会将DataFrame的打印内容(表格形式的字符串)拼接到执行语句中,无法被exec识别为合法的Python对象,导致赋值失败。同时如果需要在run()函数外部访问这三个变量,默认的局部变量赋值也无法生效。

最优修改方案(不使用exec,更安全)

直接操作全局变量字典globals()完成动态赋值,代码可读性和安全性都更高:

import pandas as pd

def run():
    dataframe = {
        "Values": [1, 2, 3, 4],
        "Montly PnL": [10, 2, 2, 1],
        "Long Montly PnL": [232, 12, 3, 4],
        "Short Montly PnL": [21, 2, 1, 5],
    }
    Up_dataframe = {
        "Values": [1, 2, 3, 4],
        "Montly PnL": [55, 6, 5, 5],
        "Long Montly PnL": [1, 4, 22, 4],
        "Short Montly PnL": [5, 2, 1, 4],
    }
    Down_dataframe = {
        "Values": [1, 2, 3, 4],
        "Montly PnL": [4, 2, 23, 12],
        "Long Montly PnL": [221, 45, 2, 1],
        "Short Montly PnL": [1, 6, 2, 44],
    }
    # 构造变量名和对应源数据的映射关系
    var_map = {
        "df_dataframe": dataframe,
        "UP_dataframe": Up_dataframe,
        "Down_dataframe": Down_dataframe
    }
    for var_name, raw_data in var_map.items():
        # 直接给全局变量字典赋值,函数外部可直接访问对应变量
        globals()[var_name] = pd.DataFrame(data=raw_data).set_index('Values')

run()

运行后你就可以直接在全局环境调用df_dataframe、UP_dataframe、Down_dataframe三个变量,得到符合预期的DataFrame结果。

若必须使用exec的修改方案

如果确实需要使用exec实现,需要避免DataFrame实例直接转字符串的问题,调整写法如下:

# 原循环部分替换为以下代码
for k, v in zip(
    ["df_dataframe", "UP_dataframe", "Down_dataframe"],
    [dataframe, Up_dataframe, Down_dataframe],
):
    # 将v传入exec的局部命名空间,在exec内部完成DataFrame构造
    exec(f"{k} = pd.DataFrame(data=v).set_index('Values')", globals(), {'v': v})

内容的提问来源于stack exchange,提问作者georgehere

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 18:36:06