【问题标题】:Enter pandas values cell wise以单元格方式输入 pandas 值
【发布时间】:2022-01-20 23:43:52
【问题描述】:

我有一本字典,即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 列是我拥有的国家的数量。 每个单元格 (row,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

但它很幼稚,行不通。 你能帮我解决这个问题吗?

谢谢,

费德里科

【问题讨论】:

  • 看来您必须运行for-loop 才能获取'Elasticity ACETYLCYSTEINE to ACETYLCYSTEINE AUSTRIA' 之类的密钥并转换为["AUSTRIA"]["ACETYLCYSTEINE to ACETYLCYSTEINE"] 等,然后再将其转换为DataFrame

标签: python pandas dataframe dictionary


【解决方案1】:

您应该首先使用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**                   NaN

【讨论】:

    猜你喜欢
    • 2022-11-16
    • 2023-03-20
    • 2019-04-09
    • 2014-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多