将数据框中的A2等项替换为AA



我有一个项目列表,如">A2BCO6"one_answers"ABC2O6"。我想把它们替换成A2BCO6——比;AABCO6 and ABC2O6——比;CC O6。项目的数量远比这里展示的要多。

My dataframe is like:
listAB:
Finctional_Group
0   Ba2NbFeO6
1   Ba2ScIrO6
3   MnPb2WO6

我创建了一个重复的数组,并试图用以下方式替换:

B = ["Ba2", "Pb2"]
C = ["BaBa", "PbPb"]
for i,j in range(len(B)), range(len(C)):
listAB["Finctional_Group"]= listAB["Finctional_Group"].str.strip().str.replace(B[i], C[j])

但是它不能产生正确的输出。输出如下所示:

listAB:
Finctional_Group
0   PbPbNbFeO6
1   PbPbScIrO6
3   MnPb2WO6

请建议对代码进行必要的修改。

提前感谢。

为了简单起见,我使用了chemparse包,它似乎可以满足您的需求。

像往常一样,我们导入所需的包,在本例中是chemparsepandas

import chemparse 
import pandas as pd

然后我们创建一个pandas.DataFrame对象,就像你的例子中你的例子数据。

df = pd.DataFrame(
columns=["Finctional_Group"], data=["Ba2NbFeO6", "Ba2ScIrO6", "MnPb2WO6"]
)

我们解析器函数将使用chemparse.parse_formula返回元素和它们的频率的dict分子式。

def parse_molecule(molecule: str) -> dict:
# initializing empty string
molecule_in_string = ""
# iterating over all key & values in dict
for key, value in chemparse.parse_formula(molecule).items():
# appending number of elements to string
molecule_in_string += key * int(value)
return molecule_in_string

molecule_in_string现在包含没有数字的分子式。我们只需要将这个函数映射到数据框架列中的所有元素。我们可以这样做

df = df.applymap(parse_molecule)
print(df)

返回:

0    BaBaNbFeOOOOOO
1    BaBaScIrOOOOOO
2     MnPbPbWOOOOOO
dtype: object

chemparse的源代码:https://gitlab.com/gmboyer/chemparse

最新更新