我正在尝试查找字典词典,但是这样做很困难。
数据是一个字典,看起来像这样:
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']]
对此需要一些指导。
答案 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,可能会有更好的方法。