【问题标题】:For loop to create pandas dataframes - varying dataframe names?用于创建熊猫数据框的循环 - 不同的数据框名称?
【发布时间】:2018-04-11 14:31:15
【问题描述】:

我想创建 3 个数据框,如下所示:

basket = [['Apple', 'Banana', 'Orange']]

for fruit in basket:
    fruit = pd.DataFrame(np.random.rand(10,3))

但是,在运行这个之后,运行类似:

Apple

给出错误

NameError: name 'Apple 未定义

但“水果”作为数据框确实有效。

如何让生成的每个数据帧都以变量为名称?

【问题讨论】:

  • 我建议对变量使用字典。

标签: pandas loops dataframe


【解决方案1】:

这可行:

basket = ['Apple', 'Banana', 'Orange']
for fruit in basket:
    vars()[fruit] = pd.DataFrame(np.random.rand(10,3))

但是,最好将其分配给字典,例如:

var_dict={}
basket = ['Apple', 'Banana', 'Orange']
for fruit in basket:
    var_dict[fruit] = pd.DataFrame(np.random.rand(10,3))

【讨论】:

  • 谢谢,这很有帮助,但我不知道。然后,您将如何仅从水果名称(即 Apple)中调用数据框,因为我认为这种方式的唯一方法是通过 var_dict['Apple']?
  • 我给出的第一个解决方案可以让你直接按名字调用,但字典解决方案不会
【解决方案2】:

不要使用dict创建变量来存储dfs,而是在循环上创建变量不是一个好习惯,即

basket = ['Apple', 'Banana', 'Orange']

d_o_dfs = {x: pd.DataFrame(np.random.rand(10,3)) for x in basket}

不推荐,但如果您想将其存储在变量中,请使用全局变量,即

for i in basket:
    globals()[i] = pd.DataFrame(np.random.rand(10,3))

输出: Bananad_o_dfs['Banana']

0 1 2 0 0.822190 0.115136 0.807569 1 0.698041 0.936516 0.438414 2 0.184000 0.772022 0.006315 3 0.684076 0.988414 0.991671 4 0.017289 0.560416 0.349688 5 0.379464 0.642631 0.373243 6 0.956938 0.485344 0.276470 7 0.910433 0.062117 0.670629 8 0.507549 0.393622 0.003585 9 0.878740 0.209498 0.498594

【讨论】:

    猜你喜欢
    • 2015-09-12
    • 1970-01-01
    • 2022-10-24
    • 1970-01-01
    • 2022-11-18
    • 1970-01-01
    • 1970-01-01
    • 2022-01-08
    • 1970-01-01
    相关资源
    最近更新 更多