跨行展开字典,维护其他列- python

vktxenjb  于 2023-04-10  发布在  Python
关注(0)|答案(1)|浏览(84)

我有一个蛋白质列表(primaryAccession)和我从UnitProtKB解析的关于它们的信息。我以JSON格式抓取信息,我试图弄清楚如何编写一个循环,将数据分隔到不同的列中。目前我的数据看起来像这样:
| 主要加入|uniProtKB交叉引用|
| --------------|--------------|
| Q14457|'数据库':'Reactome','id':'R-HSA-1632852','属性':['key':'PathwayName',' value ':'Macroautophagy'}]},' database ':'Reactome','id':'R-HSA-5689880','属性':['key':'PathwayName',' value ':'Ub特异性加工蛋白酶'}]}|
| Q08380|'数据库':'ProteomicsDB','id':'59999','属性':['key':'Description','value':'-'}]},'数据库':'Antibodypedia','id':'4116','属性':[{“键”:“抗体”,“值”:'来自47个提供商的1663种抗体'}]}|
我想让它看起来像这样:
| 主要加入|资料库|身份证|性能|
| --------------|--------------|--------------|--------------|
| Q14457|React组|R-HSA-1632852|['key':'PathwayName',' value ':巨噬细胞自噬|
| Q14557|React组|R-HSA-5689880|['key':'PathwayName',' value ':'Ub特异性加工蛋白酶'}]}|
| Q08380|ProteomicsDB|五九九九|['key':'Description','value':'-'}]|
| Q08380|抗体百科|小行星4116|[{“键”:“抗体”,“值”:'来自47个提供商的1663种抗体'}]}|
我已经使用了这个函数(下面的dict_list_to_df)来拆分'unitProtKBCrossReferences'列,但是它删除了primaryAccession列,我不知道如何将其添加回来,以便我可以知道信息所指的是哪个蛋白质。我如何做到这一点,以便在分解'uniProtKBCrossReferences'列时,我仍然可以保留蛋白质ID(primaryAccession)?

def dict_list_to_df(df, col):
    """Return a Pandas dataframe based on a column that contains a list of JSON objects or dictionaries.
    Args:
        df (Pandas dataframe): The dataframe to be flattened.
        col (str): The name of the column that contains the JSON objects or dictionaries.
    Returns:
        Pandas dataframe: A new dataframe with the JSON objects or dictionaries expanded into columns.
    """

    rows = []
    for index, row in df[col].items():
        for item in row:
            rows.append(item)
    df = pd.DataFrame(rows)
    return df
lp0sw83n

lp0sw83n1#

一个选项是literal_eval字典列表,然后explode它来构造DataFrame

from ast import literal_eval

df["uniProtKBCrossReferences"] = df["uniProtKBCrossReferences"].apply(literal_eval)
​
s = df["uniProtKBCrossReferences"].explode()

out = df[["primaryAccession"]].join(pd.DataFrame(s.tolist(), index=s.index))

输出:

print(out)

  primaryAccession       database             id                                                             properties
0           Q14457       Reactome  R-HSA-1632852                    [{'key': 'PathwayName', 'value': 'Macroautophagy'}]
0           Q14457       Reactome  R-HSA-5689880  [{'key': 'PathwayName', 'value': 'Ub-specific processing proteases'}]
1           Q08380   ProteomicsDB          59999                                 [{'key': 'Description', 'value': '-'}]
1           Q08380  Antibodypedia           4116  [{'key': 'antibodies', 'value': '1663 antibodies from 47 providers'}]

相关问题