2016-04-07 10 views
2
どのように私は、これらの列でパンダのデータフレームにPythonの辞書の上に変換しない
my_dict = { 'company_a': [], 
      'company_b': [ {'gender': 'Male', 
          'investor': True, 
          'name': 'xyz', 
          'title': 'Board Member'} ], 
      'company_c': [], 
      'company_m': [ {'gender': 'Male', 
          'investor': None, 
          'name': 'abc', 
          'title': 'Advisor'}, 
          {'gender': 'Male', 
          'investor': None, 
          'name': 'opq', 
          'title': 'Advisor'} ], 
      'company_x': [], 
      'company_y': [] } 

company, gender, investor, name, titleパンダDATAFRAME

companymy_dictのトップレベルのキーによって取り込まれます。他の列には、配列内の辞書の値が入力されます。

私はpd.DataFrame.from_dict(my_dict, orient='index')を試しましたが、私が欲しいものを与えてくれません。

答えて

2

このバージョンでは、Noneですべての欠損値を埋め:

data = {'company': [], 'gender': [], 'investor': [], 'name': [], 'title': []} 
for k, v in my_dict.items(): 
    for entry in v: 
     data['company'].append(k) 
    if not v: 
     data['company'].append(k) 
    for name in ['gender', 'investor', 'name', 'title']: 
     has_entry = False 
     for entry in v: 
      has_entry = True 
      data[name].append(entry.get(name)) 
     if not has_entry: 
      data[name].append(None) 
df = pd.DataFrame(data) 
print(df) 

出力:

 company gender investor name   title 
0 company_a None  None None   None 
1 company_y None  None None   None 
2 company_b Male  True xyz Board Member 
3 company_c None  None None   None 
4 company_x None  None None   None 
5 company_m Male  None abc  Advisor 
6 company_m Male  None opq  Advisor 

をまたNaNですべてNoneを置き換えることができます。

print(df.fillna(np.nan)) 

出力:

 company gender investor name   title 
0 company_a NaN  NaN NaN   NaN 
1 company_y NaN  NaN NaN   NaN 
2 company_b Male  True xyz Board Member 
3 company_c NaN  NaN NaN   NaN 
4 company_x NaN  NaN NaN   NaN 
5 company_m Male  NaN abc  Advisor 
6 company_m Male  NaN opq  Advisor 
+0

ニースソリューション、私の削除など、より良いです。 – jezrael

0

ちょっと混乱しますが、これはネストされた辞書の属性によって柔軟性があり、企業を独自の列に配置します。

df = pd.DataFrame(columns = ['company']) 
i = 0 

for company in my_dict: 
    for nested_dict in my_dict[company]: 
     df.loc[i,'company'] = company 
     for attribute in nested_dict.keys(): 
      df.loc[i, attribute] = nested_dict[attribute] 
     i += 1 

出力:

Out[46]: 
    company  name gender title   investor 
0 company_m abc Male Advisor  NaN 
1 company_m opq Male Advisor  NaN 
2 company_b xyz Male Board Member True 
関連する問題