2017-03-04 8 views
1

Dictionariesで特定の列を含むDataFrameがあります。列dictの各キーをヘッダーとして追加する新しいDataFrameを作成します。

dictsを含む列の各要素にあるキーごとにDataFrameに新しいヘッダーを追加したい場合は、その要素にそのヘッダーキーが含まれていない場合、新しいセルに割り当てられた新しい値はNoneに対応する必要がありますそれ以外の場合はそれぞれのキー値を返します。

はここでテスト用のデータをだと可視化私が言っている何を:

インポート依存関係:

import pandas as pd 
import numpy as np 

内部辞書のリストが含ま辞書の作成:

data = {'string_info': ['User1', 'User2', 'User3'], 
     'dict_info': [{'elm1': 'attr5', 'elm2': 'attr9', 'elm3': 'attr33'}, 
       {'elm5': 'attr31', 'elm7': 'attr13'}, 
       {'elm5': 'attr28', 'elm1': 'attr23', 'elm2': 'attr33','elm6': 'attr33'}], 
     'int_info': [4, 24, 31],} 

の作成をテストのための適切な初期DataFrame:

df = pd.DataFrame.from_dict(data) 
df 

手動で私は出力として何をしたい旨:

data2 = {'string_info': ['User1', 'User2', 'User3'], 
     'elm1': ['attr5',None,'attr23'], 
     'elm2': ['attr9',None,'attr33'], 
     'elm3': ['attr33',None,None], 
     'elm4': [None,None,None], 
     'elm5': [None,'attr31',None], 
     'elm6': [None,None,'attr33'], 
     'elm7': [None,None,'attr13'], 
     'int_info': [4, 24, 31]} 

所望の出力は次のようになります。

df2 = pd.DataFrame.from_dict(data2) 
df2 

ありがとう!

答えて

1

あなたは列にdictを置き換えるためDataFrameコンストラクタでconcatを使用することができます。

print (pd.DataFrame(df.dict_info.values.tolist())) 
    elm1 elm2 elm3 elm5 elm6 elm7 
0 attr5 attr9 attr33  NaN  NaN  NaN 
1  NaN  NaN  NaN attr31  NaN attr13 
2 attr23 attr33  NaN attr28 attr33  NaN 

print (pd.concat([pd.DataFrame(df.dict_info.values.tolist()), 
        df[['int_info','string_info']]], axis=1)) 
    elm1 elm2 elm3 elm5 elm6 elm7 int_info string_info 
0 attr5 attr9 attr33  NaN  NaN  NaN   4  User1 
1  NaN  NaN  NaN attr31  NaN attr13  24  User2 
2 attr23 attr33  NaN attr28 attr33  NaN  31  User3 

そして必要None sがreplaceを追加した場合:

print (pd.concat([pd.DataFrame(df.dict_info.values.tolist()).replace({np.nan:None}), 
        df[['int_info','string_info']]], axis=1)) 
    elm1 elm2 elm3 elm5 elm6 elm7 int_info string_info 
0 attr5 attr9 attr33 None None None   4  User1 
1 None None None attr31 None attr13  24  User2 
2 attr23 attr33 None attr28 attr33 None  31  User3 
+0

、それは働いていた、どうもありがとうございました!私は間違いなくpd.concatの詳細をチェックしています。ありがとう! – EduGord

関連する問題