2016-10-20 8 views
1

にデータフレームに記憶されている辞書に追加するだから私は{c: 2}のような別のキーペアが列Cのすべての値にこれを追加するための構文は何でしょうか考えると、次の

a b c 
0 AB 10 {a: 2, b: 1} 
1 AB 1 {a: 3, b: 2} 
2 AC 2 {a: 4, b: 3} 
... 
400 BC 4 {a: 1, b: 4} 

のように見えるのデータフレームを持っていますか

a b c 
0 AB 10 {a: 2, b: 1, c: 2} 
1 AB 1 {a: 3, b: 2, c: 2} 
2 AC 2 {a: 4, b: 3, c: 2} 
... 
400 BC 4 {a: 1, b: 4, c: 2} 
私は df['C'] +=, and df['C'].append()を試してみた

、およびdf.C.appendが、どちらも動作するようです。

+0

'のDF [「C」]の更新(C = 2)' –

+0

これは例外TypeErrorを返さ辞書。 – SharpObject

+1

'df ['c'] = df.c.apply(ラムダx:dict(x、c = 2))'?あなたの辞書の順序が変わるかもしれないことに注意してください。 – Abdou

答えて

2

複数のキーに使用できる別の辞書を使用して、列内の辞書を更新する一般的な方法です。

テストデータフレーム:

>>> x = pd.Series([{'a':2,'b':1}]) 
>>> df = pd.DataFrame(x, columns=['c']) 
>>> df 
        c 
0 {'b': 1, 'a': 2} 

そして、ちょうどapplyラムダ関数:

>>> update_dict = {'c': 2} 
>>> df['c'].apply(lambda x: {**x, **update_dict}) 
0 {'b': 1, 'a': 2, 'c': 2} 
Name: c, dtype: object 

注:これはHow to merge two Python dictionaries in a single expression?への答えで述べたのpython3更新辞書の構文を使用しています。 Python2では、一番上の答えにmerge_two_dicts関数を使うことができます。あなたはその答えから関数定義を使用して、書くことができます:「C」はではまだ存在しないため、

df['c'].apply(lambda x: merge_two_dicts(x, update_dict)) 
+0

ええと、これは私にSyntaxErrorを与えています:** xの部分に無効な構文 – SharpObject

+0

Python2を使用していますか? – brianpck

+0

ええ、私はメインのポストで言及するのを忘れたと思います。 – SharpObject