在Python中查找字典词典

时间:2019-06-25 06:44:11

标签: python pandas dictionary

我正在尝试查找字典词典,但是这样做很困难。

数据是一个字典,看起来像这样:

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是一个熊猫数据框,可以通过以下方式复制:

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

对此需要一些指导。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分: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,可能会有更好的方法。