for循环创建pandas数据帧 - 不同的数据帧名称?

时间:2017-10-30 14:49:00

标签: pandas loops dataframe

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

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

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

然而,在运行之后,运行类似:

Apple

给出错误

  

NameError:名称' Apple未定义

但是'水果'作为数据框确实有效。

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

2 个答案:

答案 0 :(得分:3)

使用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

答案 1 :(得分:2)

这样可行:

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))