[英]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
列轉換為source
為uniprot_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.