【发布时间】:2021-02-19 23:26:12
【问题描述】:
这是我第一个链接到我的第一个 Python 项目的问题。 简单来说,我在 Excel 中有 2 列数据,如下所示(前 6 行):
destination_area | destination_code
SG37.D0 | SG37.D
SG30.C0 | SG30.C
SG4.A3.P | SG4.A
SG15.C16 | SG15.C
SG35.D02 | SG35.D
SG8.A5.BC | SG8.A
所以在 Excel 中,我使用一个函数通过查找第一个“。”来获取目标代码。在单元格中 & 返回它左边的所有字符,加上 1 个字符:
=IfError(left(E2,search(".",E2)+1),"")
现在我想使用 str.extract 来执行它
df1['destination_code'] = df1['destination_area'].str.extract(r"(?=(.*[0-9][.][A-Z]))", expand = False)
print(df1['destination_area'].head(6),df1['destination_code'].head(6))
我几乎得到了我需要的东西,但代码仍然可以识别那些有超过 1 个“。”的代码
destination_area | destination_code
SG37.D0 | SG37.D
SG30.C0 | SG30.C
SG4.A3.P | SG4.A3.P
SG15.C16 | SG15.C
SG35.D02 | SG35.D
SG8.A5.BC | SG8.A5.BC
我认识到我的正则表达式正在理解 {a number + "." 的模式。 + 一个字母},返回“SG4.A3.P”和“SG8.A5.BC”情况下的所有字符。 那么如何修改我的代码呢?或者像 Excel 那样执行代码的更好方法?提前致谢
【问题讨论】:
-
改用
r"(?=(\w+[.][A-Z]))"? -
完美修改。谢谢!