2017-08-15 1 views
2

によって配向ネストされた辞書のキーと値のリストを取得し、私は、Excelは、このような構造を持つファイル持っています:インデックス

{'anna': {'age':35}, {'status': 'single'}}, 
{'petr': {'age':27}, {'status': 'married'}} 

使ってパンダ:

import pandas as pd 
df = pd.read_excel('path/to/file') 
df.set_index('name', inplace=True) 
print(df.to_dict(orient='index')) 

しかし、今list(df.keys())、それのリターンを実行しています私はディクショナリ内のすべてのキー( '年齢'、 'ステータス'など)のリストを表示しますが、 '名前'は表示しません。

私の最終的な目標は、名前を入力してすべてのキーと値を返すことです。

どういうわけかできますか?または、目標を達成するためにデータをインポートするために別の方法を使用する必要がありますか?私はキーで他の辞書とマージするので、最終的に私はとにかく辞書に来るべきです。

答えて

1

を私はあなたが列を落とさないためにset_indexにパラメータdrop=Falseが必要だと思いますName

import pandas as pd 
df = pd.read_excel('path/to/file') 

df.set_index('name', inplace=True, drop=False) 
print (df) 
     name age status 
name      
anna anna 35 single 
petr petr 27 married 

d = df.to_dict(orient='index') 
print (d) 
{'anna': {'age': 35, 'status': 'single', 'name': 'anna'}, 
'petr': {'age': 27, 'status': 'married', 'name': 'petr'}} 

print (list(df.keys())) 
['name', 'age', 'status'] 
0

このお試しください:Excelからのデータフレームを考える

import pandas as pd 
df = pd.read_excel('path/to/file') 
df[df['name']=='anna'] #Get all details of anna 
df[df['name']=='petr'] #Get all details of petr 
+0

ありがとうございますが、 'name 'を普通のキーに変えてください – Ekaterina

+0

' my_dict = df.set_index(' name ')。transpose()。to_dict(orient =' list ') 'そして、' my_dict [' anna '] ' 'my_dict [' petr'] –

+0

それは私を返します: 'UserWarning:DataFrame列は一意ではなく、いくつかの列は省略されます。 "列は省略されます。"、UserWarning) '列は一意ですが – Ekaterina

1

を、あなたが欲しいもの得るために、これを行う必要があります。

resulting_dict = {} 

for name, info in df.groupby('name').apply(lambda x: x.to_dict()).iteritems(): 
    stats = {} 
    for key, values in info.items(): 
     if key != 'name': 
      value = list(values.values())[0] 
      stats[key] = value 
    resulting_dict[name] = stats 
関連する問題