2017-08-15 91 views
2

導向鍵和值的列表我有一個Excel與像這樣的結構文件:獲取嵌套字典由索引

name age status 
anna 35 single 
petr 27 married 

我已經轉換這樣的文件到嵌套字典,這樣的結構:

{'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

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

試試這個:

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')。轉置()。to_dict(orient ='list')'然後使用'my_dict ['anna']'將'name'轉換成普通的密鑰 – Ekaterina

+0

嘗試:'my_dict = df.set_index和'my_dict ['petr'] –

+0

它返回我:'UserWarning:DataFrame列不是唯一的,有些列將被省略。 「列將被省略」,UserWarning),儘管列是唯一的 – Ekaterina

1

鑑於從Excel數據框中,你應該這樣做,以獲得你想要的東西:我認爲你需要參數drop=Falseset_index不刪除列

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