【问题标题】:Dynamically assigning variables to pandas functions将变量动态分配给 pandas 函数
【发布时间】:2021-12-05 03:23:27
【问题描述】:

我想将 pandas 数据框变量动态分配给dataframe, Up_dataframe, Down_dataframe,数据框变量将命名为以下df_dataframe, UP_dataframe, Down_dataframe

我如何才能修复下面的代码并分配变量?

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],
    }

    for k, v in zip(
        {"df_dataframe": None, "UP_dataframe": None, "Down_dataframe": None}.keys(),
        [dataframe, Up_dataframe, Down_dataframe],
    ):
        exec(f"{k} = {pd.DataFrame(data=v).set_index('Values')}")


run()

预期输出:

【问题讨论】:

  • 动态命名变量 -> 不。只需使用带有所需键的字典即可。

标签: python pandas database dataframe variables


【解决方案1】:

您可以在函数末尾使用globals() 而不是exec 动态分配,如下所示:

def run():
    ...
    for k, v in zip(
        {"df_dataframe": None, "UP_dataframe": None, "Down_dataframe": None}.keys(),
        [dataframe, Up_dataframe, Down_dataframe],
    ):
        globals()[k] = pd.DataFrame(data=v).set_index("Values")

run()
print(df_dataframe)

此代码将输出以下内容,即使 df_dataframe 未在您的代码中静态分配:

        Montly PnL  Long Montly PnL  Short Montly PnL
Values
1               10              232                21
2                2               12                 2
3                2                3                 1
4                1                4                 5

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-27
    • 1970-01-01
    相关资源
    最近更新 更多