我希望提取在这个数据框中"加入"之后的数字字符串。我的数据框架看起来像这样:
targets_list = pd.DataFrame(targets_df[['target_components', 'target_chembl_id']])
和target_components
中每列的元素如下所示:
[{'accession': 'O43451', 'component_description': 'Maltase-glucoamylase, intestinal', 'component_id': 434, 'component_type': 'PROTEIN', 'relationship': 'SINGLE PROTEIN', 'target_component_synonyms',...}]
我只想提取"加入"后的数字代码。因为我认为它是列表的第一个元素,所以我尝试tgt = targets_list['target_components'][0][0]
,但这会返回该列表的第一个元素,而不是加入号。
我可以看到它是每一行中的一个列表,但是如何解析该列表并获得该数字并将其添加到列中是我所缺少的。也许用正则表达式是可能的?但我不确定Regex是如何工作的。
你可以试试:
tgt = targets_list["target_components"].str[0].str["accession"]
结果
targets_list = pd.DataFrame(
{"target_components": [
[{"accession": "O43451", "b": "c", "d": 1}],
[{"accession": "012345", "b": "e", "d": 2}],
[{"b": "f", "d": 3}],
[]]}
)
target_components
0 [{'accession': 'O43451', 'b': 'c', 'd': 1}]
1 [{'accession': '012345', 'b': 'e', 'd': 2}]
2 [{'b': 'f', 'd': 3}]
3 []
0 O43451
1 012345
2 None
3 NaN
Name: target_components, dtype: object
您可以使用。findall()函数或。extract()函数来获取id。
参考:使用正则表达式从pandas数据框架
中提取元素首先,没有必要再次使用pd.DataFrame
从现有列创建数据框:
targets_list = targets_df[['target_components', 'target_chembl_id']]
然后您可以使用apply
访问列元素
tgt = targets_list['target_components'].apply(lambda x: x[0]['accession'])
你可以试试:
targets_list['target_components'].map(lambda x: x[0].get("accession"] if x else '')