2017-09-19 10 views
-1

私はnumpyを使って分割しているパンダのデータフレームdfを持っていますsplit_array。私は、変数を割り当てるa,b,c,dこれらの分割チャンクにPython 3.xで分割配列から動的な変数を作成する方法は?

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を手動でタイプする必要があります。これは明らかな理由からしたくありません。前もってありがとう

+10

それらを持っていないのはなぜdictや値のリストとして? – Zero

+2

辞書を使うだけです。あなたが望むようにグローバルな名前空間を汚染することは、ほとんど常に、恐ろしい考えです。 –

+0

ありがとう、私は、辞書を使用する以外にこれを行うにはいくつかの方法があったと思っていたと思います。しかし、辞書を使うと答えは簡単で、 'num_partitions = 4; chunks_dict = {i:np.array_split(df、num_partitions)[i]範囲内のi(len(num_partitions))}; ' – killerT2333

答えて

1

スプリットアレイを格納するには、リストまたは辞書を使用する必要があります。リストを使用して は簡単です:あなたはarray_splitを複数回呼び出すことはありません、コメントであなたのように、辞書を使用していますが、使用したい場合はzip

chunks = np.array_split(df, num_partitions) 

chunks = dict(zip(range(num_partitions), np.array_split(df, num_partitions)) 
-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

おそらくうまくいくでしょうが、良い考えではありません。 – Zero

+0

@Zero私もあなたに同意します。辞書を使うだけでもっとうまくいくはずです...ほとんどの場合、変数を割り当てるために必ずしもexecを使用していないのであれば、悪い考えです。しかし、それは彼らの質問だったので、私はそれに答えました。 – MustacheMoses

+0

@Zero最初に免責事項を追加しました。 :) – MustacheMoses

-3

長いリストのデータを使用する場合は、クラス、辞書、または配列自体のようなPythonコンテナを使用するのが最善です。グローバル変数を自動的に作成すると、誤って組み込みのキーワードを上書きして問題を作成する可能性があります。

管理する最善の方法は、データを最もよく表すためにリストを使用することです。

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] 

メモリ内の同じ場所にこれらの解決の任意の変数として、すべて同じで使用することができます:あなたは本当に、本当に文字を使用したいしたい場合は

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 

クラスが良いです場所。あなたのニーズに最も適したものだけの問題です。

運が良ければ

関連する問題