如何在Python 3.x中从split数组创建动态数量的变量?

时间:2017-09-19 17:08:13

标签: python python-3.x numpy

我有一个pandas数据帧df我正在使用numpy split_array进行拆分。然后,我将变量a,b,c,d分配给这些拆分块

num_partitions = 4
# number of variables needs to be the same as num_partitions
a,b,c,d = np.array_split(df, num_partitions)
# do work on a,b,c,d
.
.
.

我的问题是,如果num_partitions要更改,我该如何动态创建这些变量并将它们分配给拆分块?因此,例如,如果num_partitions要更改为100,那么我将不得不在当前方法中手动输出变量var_0,...,var_99,出于显而易见的原因我不想这样做。提前致谢

3 个答案:

答案 0 :(得分:1)

您应该使用列表或字典来存储拆分数组。 使用列表很简单:

chunks = np.array_split(df, num_partitions)

如果您想使用字词,例如评论中的字典,请不要多次拨打array_split,但请使用zip

chunks = dict(zip(range(num_partitions), np.array_split(df, num_partitions))

答案 1 :(得分:-2)

大多数时候,如果不总是使用exec来分配变量是一个非常糟糕的主意,我强烈反对你这样做。但是因为你在这里问了代码。更好的练习将使用字典而不是动态分配变量。

import string
chars=string.ascii_letters
num_partitions = 4
for i,j in np.array_split(df, num_partitions),range(num_partitions):
    exec("{}={}".format(chars[j],i))
# do work on a,b,c,d...
.
.
.

请注意,这最多只能支持52.只需更长时间。

答案 2 :(得分:-3)

如果你使用一长串数据,最好使用python容器,如类,字典或数组本身。自动创建全局变量可能会意外覆盖内置关键字并产生问题。

管理的最佳方式是使用列表,因为它最能代表数据。

arr=list(np.array_split(df,num_partitions))
arr[0]#same as using variable 'a'

arr.sort()      #sorts it
arr.reverse()   #reverses it
arr.index(val)  #finds the position of a value in the index
如果你真的想要使用字母,那么

类很好:

class contain:
    def __init__(self,arr):
        for i in range(len(arr)):
            key=''.join([chr(int(j)+97) for j in str(i)])
            setattr(self,key,arr[i])

 c=contain(arr)
 c.a    #same output as arr[0]
 c.ba   #same as arr[11]

其中任何一个解析到内存中与变量相同的位置,并且可以在所有相同的位置使用。只是最符合您需求的问题。

祝你好运