2017-01-20 12 views
1

私は作成したpandas dfを持っています。次のようにDFの構造は次のとおりです。 -json要素をpandasデータフレームに追加

A B C D 
0 a b c NaN 
2 x y z NaN 
. 
. 

は今も私は私のリストの要素を追加したいと思い

[{a:1,b:2},{c:1,d:2},....] 

ような要素としてJSONを持つリストリスト1を持っていますJSONパンダDF私のDFは私がやった

A B C D 
0 a b c {a:1,b:2} 
2 x y z {c:1,d:2} 
. 
. 

のように見えるように

df['D'].iloc[0] = list[0] 

エラーが発生しました。私はここで何をしていますか?

答えて

2

ソリューションlist1lengthDataFrameの長さと同じである場合:

あなたはdfと同じインデックスを持つ最初のSeriesを作成し、新しい列に割り当てる必要があります。DataFrame.assign

print (pd.Series(list1, index=df.index)) 
0 {'b': 2, 'a': 1} 
2 {'d': 2, 'c': 1} 
dtype: object 

df['D'] = pd.Series(list1, index=df.index) 
print (df) 
    A B C     D 
0 a b c {'b': 2, 'a': 1} 
2 x y z {'d': 2, 'c': 1} 

別の解決策:

df = df.assign(D=pd.Series(list1, index=df.index)) 
print (df) 
    A B C     D 
0 a b c {'b': 2, 'a': 1} 
2 x y z {'d': 2, 'c': 1} 

Sコメントをolution、あなたにNickil Maveliに感謝:

df.loc[:, 'D'] = list1 

またはそれ以上:

df['D'] = list1 

print (df) 
    A B C     D 
0 a b c {'b': 2, 'a': 1} 
2 x y z {'d': 2, 'c': 1} 

lenghtsが異なっている場合、それはもう少し複雑です - df.indexlengthによって及びlist1lengthによって位置によって選択する必要が:

print (df) 
    A B C D 
0 a b c NaN 
2 x y z NaN 
5 y e t NaN 

list1 = [{'a':1,'b':2},{'c':1,'d':2}] 
df['D'] = pd.Series(list1[:len(df.index)], index=df.index[:len(list1)]) 
print (df) 
    A B C     D 
0 a b c {'b': 2, 'a': 1} 
2 x y z {'d': 2, 'c': 1} 
5 y e t    NaN 

print (df) 
    A B C D 
0 a b c NaN 
2 x y z NaN 
5 y e t NaN 

list1 = [{'a':1,'b':2},{'c':1,'d':2}, {'a':1,'b':2},{'c':1,'d':2}] 
df['D'] = pd.Series(list1[:len(df.index)], index=df.index[:len(list1)]) 
print (df) 
    A B C     D 
0 a b c {'b': 2, 'a': 1} 
2 x y z {'d': 2, 'c': 1} 
5 y e t {'b': 2, 'a': 1} 
+0

単純な 'loc'はここで十分ではありません - ' df.loc [:, 'D'] = L'? –

関連する問題