我有一些数据,如下所示:
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/