首页 > 解决方案 > 从 pandas 单元格中提取特定符号,然后用它们作为键的 dict 中的值替换它们

问题描述

我的数据看起来像这样,这是其中的两列:

Index  MSC Primary   MSC Secondary
0       05C25      (05C20 20F05)
1       20-04      (20F55 62Qxx)
2       13F20      (17B20 22E40 22F30 65Fxx)
3       05Exx      (20-04 20H20)
4       20G40      (05C25)

这些是 MSC 代码,对应于不同的科学领域。我需要在这里用这个字典中的相应主题替换每个代码:https ://mathscinet.ams.org/msnhtml/msc2020.pdf ,其中一些是:“”“00 一般和总体主题;集合 01 历史和传记03 数学逻辑和基础 05 组合“””

首先,我需要从每个代码中分离出前两位数字,例如05C25转换为05或从第二列(05E15 14H50)转换为05, 14.

然后我需要将每个数字替换为相应的科学,例如05, 14变成Combinatorics, Algebraic geometry. 这都是棘手的形式,因为我是 Python 新手,第二列每个单元格中的 MSC 代码数量不同,所以我不能在那里使用索引。

我知道第一列我可以使用索引:

df['MSC Primary'] = [x[:2] for x in df['MSC Primary']]

但这不适用于另一列,因为有几个辅助 MSC 代码,每个小区都不同。

感谢您的帮助,非常感谢。

标签: pythonpandas

解决方案


假设您的 MSC 代码字典是d,这有效:

>>> df["MSC Secondary"].apply(lambda x: [d.get(s[:2]) for s in x.replace("(","").replace(")","").split(" ")])

0    [Combinatorics, Group theory and generalizations]
1       [Group theory and generalizations, Statistics]
2    [Nonassociative rings and algebras, Topologica...
3    [Group theory and generalizations, Group theor...
4                                      [Combinatorics]

推荐阅读