簡體   English   中英

在 Python 中查找字典

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM