如何在Python3.x中从拆分数组创建动态数量的变量?
我有一个熊猫数据帧如何在Python3.x中从拆分数组创建动态数量的变量?,python,python-3.x,numpy,Python,Python 3.x,Numpy,我有一个熊猫数据帧df,我正在使用numpysplit\u数组来拆分它。然后我将变量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_分区发生变化,我如何动态创建这些变量并将它们分配给分割
df
,我正在使用numpysplit\u数组来拆分它。然后我将变量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_分区
发生变化,我如何动态创建这些变量并将它们分配给分割块?因此,例如,如果num\u partitions
更改为100,那么我必须在当前方法中手动键入变量var\u 0,…,var\u 99
,因为明显的原因,我不想这样做。如果不总是使用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个。只需将字符列表加长。如果您使用的数据列表很长,最好使用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]
其中任何一个都可以作为变量解析到内存中的同一位置,并且可以在所有相同的位置使用。只是一个什么最适合你的问题
祝您好运您应该使用列表或字典来存储拆分数组。
使用列表很容易:
chunks = np.array_split(df, num_partitions)
如果您喜欢使用字典,如注释中的,请不要多次调用array\u split
,而是使用zip
:
chunks = dict(zip(range(num_partitions), np.array_split(df, num_partitions))
为什么不把它们作为dict或值列表呢?只要使用字典就可以了。像你想的那样污染全局名称空间几乎总是一个可怕的想法。谢谢,我想我在想除了使用字典之外,是否还有其他方法可以做到这一点。但是使用字典的答案很简单,比如num\u partitions=4;chunks_dict={i:np.array_split(df,num_partitions)[i]表示范围内的i(len(num_partitions))}代码>为什么需要变量?甚至是字典钥匙<代码>拆分
已经为您提供了一个列表。通常列表更容易使用,尤其是当名称或键以某种“数字”顺序排列时。@Zero我也同意你的看法。只要用字典就好了。。。大多数(如果不是总是)使用exec分配变量是个坏主意。但那是他们的问题,所以我回答了。@Zero我在开头加了一个免责声明。:)