2016-06-28 19 views
0

に私は動的にデータフレームを分割しようとしているが、それは働いていません変数の値:iの関数が値を含んでいるでしょう「A」と呼ばれるデータフレームを作成します願っています「」..分割データフレームを動的には、Python

splitter('A', 'myset') 

答えて

0

あなたは簡単な方法でデータフレームにアクセスすることができます。

cata = cat[cat['cat'] == 'A'] 
catb = cat[cat['cat'] == 'B'] 

pandasは、コンテキストに依存するビューまたはコピーを提供します。これは、次のように説明されています。http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy

これは、ビューを返すと、基礎となるデータセットによってバックアップされることを意味します。コピーを取得すると、そのコピーの変更は元のデータセットに反映されません。

これは、後で結果を操作するときに注意する必要があることを意味します。コピーの場合、書き込み操作が発生すると多くの警告が表示されます。

あなたはすべてのデータフレームを作成しているようですので、おそらくコピーだけに興味があります。その場合、あなたの懸念事項は、それがすべてメモリに収まるかどうかである。

+0

ありがとうございますが、データフレームを動的に作成して、 'cata'や 'catb'を入力する必要はありませんが、値 'A'と 'B'はCAT'A 'またはCAT'Bに自動的に入力されます'.. – tezzaaa

1

あなたの持っているものにはいくつか問題があります。主に、関数を正しく実行していないため、変数valが等価ではなく、文字列 "val"を呼び出そうとしています。これは、2つのデータフレームであなたを残し

data = {'cat' : ['A', 'B', 'C', 'D'], 'dog' : ['e', 'f', 'g', 'h']} 
df = pd.DataFrame(data) 
print(df) 

def splitter(df, val): 
    return df[df['cat'] == val] 

val = 'A'  
df_subset = splitter(df, val) 

>df 
    cat dog 
0 A e 
1 B f 
2 C g 
3 D h 

>df_subset 
    cat dog 
0 A e 

、実際にそれを行うための機能は必要ありませんが、あなたは関数がどのように動作するかを見ることができるので、私はそこにそれを残し、これを試してみてください。特に、あなたが返すことを望むときにはoutvalを渡すことはできません。

他のいくつかの側面ノート:

データフレームは、リストなどの値を持つ辞書から作成することができますので、Seriesを呼び出す必要はありません。

ちょうど混乱しているので、参照しているデータフレーム列(この場合「cat」)と同じ名前を付けないでください。 1つのデータフレームのみを扱う場合、コンベンションはdfを使用します。

スプリッター機能を作成する代わりに、この単純なことを行うには、単にdf_subset = df[df['cat'] == val]を実行します。これは単なるおもちゃの例ではなく、関数内でさらに発生する必要があります。

+0

ありがとう、ほとんどそこに:最終的なデータフレーム名に「A」という名前を動的に渡す方法を知っていますか? df_subsetは代わりにdf_subset_aと呼ばれていますか?そうすれば、 'cat'の値ごとに異なるサブセットが作成されます – tezzaaa

+0

ループの内部で行うことができます。例: ''A'、 'B'、 'C​​'のdf ['cat'] == name]'の名前は、リスト内の各項目に対して1回ずつ3回行います。具体的な内容は、反復処理の対象と結果に何をしたいかによって異なります。 – Jeff

関連する問題