我有一个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
,出于显而易见的原因我不想这样做。提前致谢
答案 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]
其中任何一个解析到内存中与变量相同的位置,并且可以在所有相同的位置使用。只是最符合您需求的问题。
祝你好运