我有一些数据,如下所示:

In [1]:
import pandas as pd
data = [["xxxx【A001-01】", "A001-01"],
        ["xxxx【A002】",    ""],
        ["xxxx【A003-01】", "A003-01"]]
df = pd.DataFrame(data=data,columns=['A','B'])
df

out[1]:
                 A        B
0   xxxx【A001-01】   A001-01
1   xxxx【A002】
2   xxxx【A003-01】   A003-01


我尝试过,但没有成功:

df.loc[df['B'] == ""]["B"] = df.loc[df['B'] == ""]["A"].str.extract(r"(【[A-Z][0-9]+】)",expand=True).replace("【", "",regex=True).replace("】", "",regex=True)


我希望得到以下结果:

out[1]:
                 A        B
0   xxxx【A001-01】   A001-01
1   xxxx【A002】      A002
2   xxxx【A003-01】   A003-01

最佳答案

更改正则表达式模式以在【】之间提取值,仅一次创建布尔掩码m,最后一次使用DataFrame.loc通过掩码和列进行选择:

m = df['B'] == ""
df.loc[m, "B"] = df.loc[m,"A"].str.extract(r"【([A-Z][0-9]+)】",expand=False)

print (df)
               A        B
0  xxxx【A001-01】  A001-01
1     xxxx【A002】     A002
2  xxxx【A003-01】  A003-01

关于python - python Pandas 。如何将特定行的提取结果更新为原始特定行的其他列?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54838446/

10-12 17:02