2017-01-22 2 views
2

Я хотел бы преобразование DataFrame вида:Панды преобразование dataframe: добавление столбцов из пар кВ словарных

  dictionary 
0 {'b': 2, 'a': 1} 
1 {'c': 4, 'b': 3} 

из

import pandas 
df = pandas.DataFrame() 
df['dictionary'] = [{'a':1,'b':2},{'b': 3,'c':4}] 

на DataFrame глядя, как это:

  dictionary a b c 
0 {'b': 2, 'a': 1} 1.0 2 NaN 
1 {'c': 4, 'b': 3} NaN 3 4.0 

где (разумеется) порядок столбцов не имеет значения.

Как я могу это сделать без явного перехода по словарям или строкам?

ответ

3

Вы можете применить преобразование pd.Series и Concat два:

pd.concat([df, df['dictionary'].apply(pd.Series)], axis=1) 
Out: 
     dictionary a b c 
0 {'b': 2, 'a': 1} 1.0 2.0 NaN 
1 {'b': 3, 'c': 4} NaN 3.0 4.0 

Или вы могли бы использовать join

In [4]: df.join(df.dictionary.apply(pd.Series)) 
Out[4]: 
      dictionary a b c 
0 {u'a': 1, u'b': 2} 1.0 2.0 NaN 
1 {u'c': 4, u'b': 3} NaN 3.0 4.0 
+2

Neat, 'df.join (df.dictionary.apply (pd.Series))' будет работать тоже. – Zero

+0

@JohnGalt Спасибо. Это выглядит намного чище. – ayhan

+0

@JohnGalt Спасибо! Похоже, ваше решение является самым чистым, не могли бы вы дать ему ответ? –

4

Векторизованного подход путем преобразования данной серии в это list представления, а затем при выполнении конкатенации по столбцам:

pd.concat([df['dictionary'], pd.DataFrame(df['dictionary'].values.tolist())], axis=1) 

enter image description here

Смежные вопросы