[英]Lookup a dictionary of dictionaries in Python
我正在嘗試查找字典,但遇到困難。
數據是一個字典,看起來像這樣:
data={'CME':{u'JPY': 0.525, u'USD': 3.305, u'CNH': 4.805},
'EUREX':{u'USD': 3.305, u'GBP': 1.545, u'EUR': 0.375},
'GOODM':{u'KRW': 0.0},
'HKEX':{u'USD': 3.395, u'HKD': 3.565, u'CNH': 4.895},
'KIS':{u'KRW': 0.0},
'NLFX':{u'USD': 3.305},
'OSE':{u'JPY': 0.615},
'SGX':{u'JPY': 0.725, u'USD': 2.605, u'SGD': 2.575, u'CNH': 5.005, u'CNY': 0.0},
'TOCN':{u'JPY': 0.525}}
margins 是一個 Pandas 數據框,可以通過這種方式復制:
margins = pd.DataFrame([{'balance_date': '2019-06-24', 'opp_pty_cd': 'GOODM','cur': 'KRW', 'amt':9714190.0,'acct': 30}, {'balance_date': '2019-06-24', 'opp_pty_cd': 'KIS','cur': 'KRW', 'amt':1858386321.,'acct': 30}])
嘗試了以下方法:
當我這樣做時: data['GOODM']['KRW']
,我得到 0。但是,當我這樣做時: data[margins['opp_pty_cd']][margins['cur']]
,我得到這個:
KRW NaN
KRW NAN
margins['cur'].map(margins['opp_pty_cd'].map(data))
,仍然是相同的數據。
我正在使用數據框數據來查找字典,這不起作用。
根據下面的評論,嘗試將數據更改為數據幀df_dict=pd.DataFrame.from_dict(dict)
。 但是在以下情況下我仍然無法訪問數據:
data[margins['opp_pty_cd']][margins['cur']]
需要一些指導。
dict={'CME':{u'JPY': 0.525, u'USD': 3.305, u'CNH': 4.805},
'EUREX':{u'USD': 3.305, u'GBP': 1.545, u'EUR': 0.375},
'GOODM':{u'KRW': 0.0},
'HKEX':{u'USD': 3.395, u'HKD': 3.565, u'CNH': 4.895},
'KIS':{u'KRW': 0.0},
'NLFX':{u'USD': 3.305},
'OSE':{u'JPY': 0.615},
'SGX':{u'JPY': 0.725, u'USD': 2.605, u'SGD': 2.575, u'CNH': 5.005, u'CNY': 0.0},
'TOCN':{u'JPY': 0.525}}
df_dict=pd.DataFrame.from_dict(dict)
print(df_dict)
CME EUREX GOODM HKEX KIS NLFX OSE SGX TOCN
CNH 4.805 NaN NaN 4.895 NaN NaN NaN 5.005 NaN
CNY NaN NaN NaN NaN NaN NaN NaN 0.000 NaN
EUR NaN 0.375 NaN NaN NaN NaN NaN NaN NaN
GBP NaN 1.545 NaN NaN NaN NaN NaN NaN NaN
HKD NaN NaN NaN 3.565 NaN NaN NaN NaN NaN
JPY 0.525 NaN NaN NaN NaN NaN 0.615 0.725 0.525
KRW NaN NaN 0.0 NaN 0.0 NaN NaN NaN NaN
SGD NaN NaN NaN NaN NaN NaN NaN 2.575 NaN
USD 3.305 3.305 NaN 3.395 NaN 3.305 NaN 2.605 NaN
print(df_dict['GOODM']['KRW'])
0.0
這可能不是最有效的方法,但對於每一行,您可以使用:
data[row.opp_pty_cd][row.cur]
下面是一個例子:
>>> import pandas as pd
>>> data={'CME':{u'JPY': 0.525, u'USD': 3.305, u'CNH': 4.805},
... 'EUREX':{u'USD': 3.305, u'GBP': 1.545, u'EUR': 0.375},
... 'GOODM':{u'KRW': 0.0},
... 'HKEX':{u'USD': 3.395, u'HKD': 3.565, u'CNH': 4.895},
... 'KIS':{u'KRW': 0.0},
... 'NLFX':{u'USD': 3.305},
... 'OSE':{u'JPY': 0.615},
... 'SGX':{u'JPY': 0.725, u'USD': 2.605, u'SGD': 2.575, u'CNH': 5.005, u'CNY': 0.0},
... 'TOCN':{u'JPY': 0.525}}
>>> margins = pd.DataFrame([{'balance_date': '2019-06-24', 'opp_pty_cd': 'GOODM','cur': 'KRW', 'amt':9714190.0,'acct': 30}, {'balance_date': '2019-06-24', 'opp_pty_cd': 'KIS','cur': 'KRW', 'amt':1858386321.,'acct': 30}])
>>> margins
acct amt balance_date cur opp_pty_cd
0 30 9.714190e+06 2019-06-24 KRW GOODM
1 30 1.858386e+09 2019-06-24 KRW KIS
>>> for row in margins[['opp_pty_cd', 'cur']].itertuples():
... print(data[row.opp_pty_cd][row.cur])
...
0.0
0.0
如果將data
轉換為 DataFrame,可能有更好的方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.