簡體   English   中英

從列中列表中的字典中提取特定值

[英]Extract specific value from a dictionary within a list in a column

我正在嘗試從列中列表中的字典中提取值,我的 dataframe 看起來像,

             id                                         proteinIds
0  ENSG00000006194  [{'id': 'O14978', 'source': 'uniprot_swissprot...
1  ENSG00000007520  [{'id': 'Q9UJK0', 'source': 'uniprot_swissprot...
2  ENSG00000020922  [{'id': 'P49959', 'source': 'uniprot_swissprot...
3  ENSG00000036549  [{'id': 'Q8IYH5', 'source': 'uniprot_swissprot...
4  ENSG00000053524  [{'id': 'Q86YR7', 'source': 'uniprot_swissprot...

proteinIds列中的每個值都有多個 id,如下所示,我試圖僅提取與 uniprot_swissprot 相關的 id,如果字典中不存在uniprot_swissprot則返回 none

[{'id': 'O60284', 'source': 'uniprot_swissprot'},
 {'id': 'E5RFE8', 'source': 'uniprot_trembl'},
 {'id': 'E5RHS3', 'source': 'uniprot_trembl'},
 {'id': 'E5RHY1', 'source': 'uniprot_trembl'},
 {'id': 'E5RID0', 'source': 'uniprot_trembl'},
 {'id': 'E5RK88', 'source': 'uniprot_trembl'},
 {'id': 'Q17RY1', 'source': 'uniprot_obsolete'}]

預期 output

       id          proteinIds
0  ENSG00000006194  O14978
1  ENSG00000007520  Q9UJK0
2  ENSG00000020922  P49959
3  ENSG00000036549  Q8IYH5
4  ENSG00000053568  None

我嘗試使用下面的代碼,但它沒有返回與 uniprot_swissprot 相關的正確 ID,感謝您提供任何幫助,謝謝。

df1 = pd.DataFrame([[y['id'] for y in x] if  isinstance(x, list) else [None] for x in df['proteinIds']], index=df.index)

您可以嘗試將explode列中的列表proteinIds為列表,然后將字典轉換為多個 dataframe 列,並有條件地將 select id列轉換為sourceuniprot_swissprot

df['Ids'] = (df['proteinIds'].explode() # explode will keep the original index by default so we can safely assign it back
             .apply(pd.Series)
             .loc[lambda d: d['source'].eq('uniprot_swissprot'), 'id'])
print(df)

                id  \
0  ENSG00000006194
1  ENSG00000007520

                                                                                        proteinIds  \
0  [{'id': 'O60284', 'source': 'uniprot_swissprot'}, {'id': 'E5RFE8', 'source': 'uniprot_trembl'}]
1   [{'id': 'E5RK88', 'source': 'uniprot_trembl'}, {'id': 'Q17RY1', 'source': 'uniprot_obsolete'}]

      Ids
0  O60284
1     NaN

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM