如何通过正则表达式从 pandas 中的列表中提取元素?

How to extract elements from a list in pandas through regex?

我想提取此 Dataframe 中 'accession' 之后的数字字符串。我的数据框如下所示:

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',...}]

我只想提取'accession'后面的数字代码。因为我认为它是列表的第一个元素,所以我尝试 tgt = targets_list['target_components'][0][0],但是这个 returns 是该列表的第一个元素,而不是登录号。

我可以看到它是每一行中的一个列表,但是我缺少的是如何解析该列表并获取该数字并将其添加到列中。 Regex 应该可以吗?但我完全不确定 Regex 是如何工作的。

您可以使用 .findall() 函数或 .extract() 来获取 id。

参考:

你可以试试这个:

targets_list['target_components'].map(lambda x: x[0].get("accession"] if x else '')

首先,无需再次使用 pd.DataFrame 从现有列创建数据框:

targets_list = targets_df[['target_components', 'target_chembl_id']]

然后可以使用apply访问列元素

tgt = targets_list['target_components'].apply(lambda x: x[0]['accession'])

你可以试试:

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