2016-06-21 4 views
0

ここでは、達成したいと思っているものの簡略化された類推を示します。DataFrameオブジェクトを格納します。パンダ:別のDataFrame、つまりネストされたDataFrame内にDataFrameオブジェクトを格納する

>>> df = pd.DataFrame([[1,2,3],[2,4,6]], columns=list('DEF')) 
>>> df  
166: D E F 
    0 1 2 3 
    1 2 4 6 

私は、新しいデータフレームを作成し、私は新しい列の値として、新しいDataFrameオブジェクトを挿入すると、外出先での新しい列を追加します。コードを参照してください。

df.loc[df['F'] == 6, 'G'] = pickle.dumps(df_in_df) 
>>> df 
187: D E F             G 
    0 1 2 3            NaN 
    1 2 4 6 ccopy_reg\n_reconstructor\np0\n(cpandas.core.f... 

>>> revive_df_from_df = pickle.loads(df.loc[df['F'] == 6, 'G'].item()) 
>>> revive_df_from_df 
191:  X Y Z 
    0 11 13 17 
    1 19 23 31 

私が言及した後、今日の自分自身をパンダを使用して開始しました:ところで、私は文字列にデータフレームを酸洗することによって、このオーバー回避策を見つけるために管理しているが、私はそれについて何かいい感じない

>>> df_in_df = pd.DataFrame([[11,13,17],[19, 23, 31]], columns=list('XYZ')) 
>>> df.loc[df['F'] == 6, 'G'] = df_in_df 
>>> df 
    D E F G 
0 1 2 3 NaN 
1 2 4 6 NaN 
>>> df.loc[df['F'] == 6, 'G'].item() 
    nan 
>>> # But the below works fine, i.e. when I insert an integer 
>>> df.loc[df['F'] == 6, 'G'] = 4 
>>> df 
>>> D E F G 
    0 1 2 3 NaN 
    1 2 4 6 4.0 
>>> # and to verify 
>>> df.loc[df['F'] == 6, 'G'].item() 
    4.0 

10分でパンダを通るので、私は慣習を知らない、どんな良いアイデア? ありがとう!

+0

それはあなたが達成しようとしているかを理解するのは難しい - あなたは[パネル]について話している(http://pandas.pydata.org/pandas-docs/stable/dsintro.html#パネル)? – MaxU

+0

特定の行の列にDataFrameオブジェクトを挿入したいとします。 – wolframalpha

+0

そして、なぜそれをやりたいのですか? Pandasは、高速なテーブルクエリフレームワークであると考えられています。 –

答えて

1

あなたはこの動作に依存して動揺しています。 pandasは、コンストラクタや代入関数に配列のようなものを渡すときに、あなたが何を意味しているかを推測しようとしています。これは、一見意図的に、それらの境界を押しています。

locによる直接割り当てが機能しないようです。これは私が見つけた周りの作品です。再び、私はではないは、この動作がpandasバージョンより堅牢であると期待しています。

df = pd.DataFrame([[1,2,3],[2,4,6]], columns=list('DEF')) 

df_in_df = pd.DataFrame([[11,13,17],[19, 23, 31]], columns=list('XYZ')) 

df.loc[df['F'] == 6, 'G'] = np.nan 
df.loc[df['F'] == 6, 'G'] = df.loc[df['F'] == 6, ['G']].applymap(lambda x: df_in_df) 

df 

enter image description here

+0

なぜDFを別のDFに挿入するのが慣習上間違っていますか? – wolframalpha

+0

Numpyで作成された配列であるinitのパンダでは、その配列が取得されるようになりました。 @wolframalpha ..あなたのユースケースは、パンダがデザインされたものではありません。 – Merlin

+1

私はこの問題に関する権限ではありません。しかし、私は「はい」と言います。間違っていません。しかし、大会では間違っている(私はこれが何を意味するのか推測している)。パンダが提供する利点は、その推論を含む多くの形でもたらされます。一般的なオブジェクトをデータフレーム内に配置することは問題ではありません。このコードが将来のバージョンで機能し続けることを期待しています。私は開発者がこのようなことを試みるときに人々が何を意味するかをよりよく推測する試みにおいて、これがどのように機能するかを非常にうまく変更するかもしれないと思います。高次元構造を高次元構造に配置する方が、MultiIndexでの処理が優れています。 – piRSquared

1

最初Dictのを作成します。

x = pd.DataFrame() 

y = {'a':[5,4,5],'b':[6,9,7], 'c':[7,3,x]} 

# {'a': [5, 4, 5], 'b': [6, 9, 7], 'c': [7, 3, Empty DataFrame 
# Columns: [] 
# Index: []]} 

z = pd.DataFrame(y) 

# a b          c 
# 0 5 6          7 
# 1 4 9          3 
# 2 5 7 Empty DataFrame 
# Columns: [] 
# Index: [] 
# In [ ]: 

(または、のdictとそれを挿入しようとするデータフレームに変換たくさん が起こっがあり、パンダはオブジェクトを作成するときに..あなたはパンダを拷問しているあなたの使用。。大文字と小文字は入れ子になっていますが、私はそれを使用します)。

+0

はい、ありがとうございます。しかし、私は新しい列を作成し、行にDataFrameを挿入したいと思います!何か案が? – wolframalpha

+0

はい、それは確かに良いでしょう! – wolframalpha

+0

パンダの方法で挿入されたDFにアクセスする予定ですか?おそらく動作しません。リンクされたリストを使用するか、dictとpandasを使用するか、Sqliteを使用するだけで、この方法でpandaを苦労させると、今後の書き換えにつながります。 – Merlin

関連する問題