我有一本字典,即elas[key],如下所示:
{'Elasticity ACETYLCYSTEINE to ACETYLCYSTEINE AUSTRIA': '-0.028715155688298175',
'Elasticity ACETYLSALICYLIC ACID to ACETYLCYSTEINE AUSTRIA': '-0.02808962598080608',
'Elasticity ACICLOVIR to ACETYLCYSTEINE AUSTRIA': '0.14357198802565055**',
'Elasticity ACETYLCYSTEINE to ACETYLSALICYLIC ACID AUSTRIA': '0.020617153039633438',
'Elasticity ACETYLSALICYLIC ACID to ACETYLSALICYLIC ACID AUSTRIA': '-0.008093962793053928',
'Elasticity ACICLOVIR to ACETYLSALICYLIC ACID AUSTRIA': '-0.09969671142491694',
'Elasticity ACETYLCYSTEINE to ACICLOVIR AUSTRIA': '0.055992183391380713',
'Elasticity ACETYLSALICYLIC ACID to ACICLOVIR AUSTRIA': '0.007574018836887331',
'Elasticity ACICLOVIR to ACICLOVIR AUSTRIA': '-0.4614966705921674**',
'Elasticity ACETYLCYSTEINE to ACETYLCYSTEINE BELGIUM': '-0.0337746122737748',
'Elasticity ACETYLSALICYLIC ACID to ACETYLCYSTEINE BELGIUM': '0.020318835241479816',
...在一些国家继续进行。
我想做的是熊猫的数据,包含n行数n,字典中键的唯一数目(行),k列是我拥有的国家数k。每个单元格(行、k)应该有elas字典的每个值作为值。请注意,indices_list只是一个没有国家名称的elas键名称的列表。所以理想的情况是:
AUSTRIA BELGIUM
ACETYLCYSTEINE to ACETYLCYSTEINE -0.028715155688298175. -0.03377
ACETYLSALICYLIC ACID to ACETYLCYSTEINE. -0.02808962598080608 0.02031
ACICLOVIR to ACETYLCYSTEINE 0.14357198802565055**. ...
ACETYLCYSTEINE to ACETYLSALICYLIC ACID 0.020617153039633438
ACETYLSALICYLIC ACID to ACETYLSALICYLIC ACID. -0.008093962793053928
ACICLOVIR to ACETYLSALICYLIC ACID -0.09969671142491694
ACETYLCYSTEINE to ACICLOVIR 0.055992183391380713
ACETYLSALICYLIC ACID to ACICLOVIR 0.007574018836887331
ACICLOVIR to ACICLOVIR -0.4614966705921674**实际上,我有以下代码
elasticity_by_ctry = pd.DataFrame(columns=keys, index=indices_list)
for k in keys:
conto=0
for key, item in elas.items():
elasticity_by_ctry.at[indices_list[conto],k] = elas[key]
#elasticity_by_ctry.loc[indices_list[conto],k] = elas[key]
conto=conto+1
elasticity_by_ctry但这是非常天真和不起作用的。你能帮我弄清楚这个吗?
谢谢,
费德里科
发布于 2021-12-18 14:49:55
您应该首先使用for-loop,将每个键'Elasticity ACETYLCYSTEINE to ACETYLCYSTEINE AUSTRIA'拆分为"AUSTRIA"和"ACETYLCYSTEINE to ACETYLCYSTEINE",然后添加到新字典中,如["AUSTRIA"]["ACETYLCYSTEINE to ACETYLCYSTEINE"]等,然后再转换为DataFrame。
data = {'Elasticity ACETYLCYSTEINE to ACETYLCYSTEINE AUSTRIA': '-0.028715155688298175',
'Elasticity ACETYLSALICYLIC ACID to ACETYLCYSTEINE AUSTRIA': '-0.02808962598080608',
'Elasticity ACICLOVIR to ACETYLCYSTEINE AUSTRIA': '0.14357198802565055**',
'Elasticity ACETYLCYSTEINE to ACETYLSALICYLIC ACID AUSTRIA': '0.020617153039633438',
'Elasticity ACETYLSALICYLIC ACID to ACETYLSALICYLIC ACID AUSTRIA': '-0.008093962793053928',
'Elasticity ACICLOVIR to ACETYLSALICYLIC ACID AUSTRIA': '-0.09969671142491694',
'Elasticity ACETYLCYSTEINE to ACICLOVIR AUSTRIA': '0.055992183391380713',
'Elasticity ACETYLSALICYLIC ACID to ACICLOVIR AUSTRIA': '0.007574018836887331',
'Elasticity ACICLOVIR to ACICLOVIR AUSTRIA': '-0.4614966705921674**',
'Elasticity ACETYLCYSTEINE to ACETYLCYSTEINE BELGIUM': '-0.0337746122737748',
'Elasticity ACETYLSALICYLIC ACID to ACETYLCYSTEINE BELGIUM': '0.020318835241479816',
}
result = {}
for key, value in data.items():
rest, country = key.rsplit(' ', 1)
rest, new_key = rest.split(' ', 1)
print(country, '|', new_key)
if country not in result:
result[country] = {}
result[country][new_key] = value
#print(result)
import pandas as pd
df = pd.DataFrame(result)
print(df)结果:
AUSTRIA | ACETYLCYSTEINE to ACETYLCYSTEINE
AUSTRIA | ACETYLSALICYLIC ACID to ACETYLCYSTEINE
AUSTRIA | ACICLOVIR to ACETYLCYSTEINE
AUSTRIA | ACETYLCYSTEINE to ACETYLSALICYLIC ACID
AUSTRIA | ACETYLSALICYLIC ACID to ACETYLSALICYLIC ACID
AUSTRIA | ACICLOVIR to ACETYLSALICYLIC ACID
AUSTRIA | ACETYLCYSTEINE to ACICLOVIR
AUSTRIA | ACETYLSALICYLIC ACID to ACICLOVIR
AUSTRIA | ACICLOVIR to ACICLOVIR
BELGIUM | ACETYLCYSTEINE to ACETYLCYSTEINE
BELGIUM | ACETYLSALICYLIC ACID to ACETYLCYSTEINE
AUSTRIA BELGIUM
ACETYLCYSTEINE to ACETYLCYSTEINE -0.028715155688298175 -0.0337746122737748
ACETYLSALICYLIC ACID to ACETYLCYSTEINE -0.02808962598080608 0.020318835241479816
ACICLOVIR to ACETYLCYSTEINE 0.14357198802565055** NaN
ACETYLCYSTEINE to ACETYLSALICYLIC ACID 0.020617153039633438 NaN
ACETYLSALICYLIC ACID to ACETYLSALICYLIC ACID -0.008093962793053928 NaN
ACICLOVIR to ACETYLSALICYLIC ACID -0.09969671142491694 NaN
ACETYLCYSTEINE to ACICLOVIR 0.055992183391380713 NaN
ACETYLSALICYLIC ACID to ACICLOVIR 0.007574018836887331 NaN
ACICLOVIR to ACICLOVIR -0.4614966705921674** NaNhttps://stackoverflow.com/questions/70403495
复制相似问题