gpt4 book ai didi

python - 将地址拆分为三个不同系列的正则表达式 [第 1 部分]

转载 作者:太空宇宙 更新时间:2023-11-04 09:26:45 26 4
gpt4 key购买 nike

我正在使用包含客户信息的数据集试验/学习 Python。

DataFrame 结构如下(这些都是记录):

import pandas as pd
import numpy as np

df = pd.DataFrame({'cus_name' : ['James', 'Mary', 'David', 'Linda', 'George', 'Jennifer', 'John', 'Maria', 'Charles', 'Helen'],
'address' : ['Main St 59', 'Yellow Av 11 b.F1', 'Terrazzo Way 100-102', np.nan, 'Hamilton St 159 b.A/B', np.nan, 'Henry St 7 D', 'Mc-Kenzie Av 40P b.1', 'Neptune Av 14 15 b.G', np.nan ],
'postal_code' : [1410, 1210, 1020, np.nan, 1310, np.nan, 1080, 1190, 1040, np.nan],
})

print(df)

cus_name address postal_code
0 James Main St 59 1410.0
1 Mary Yellow Av 11 b.F1 1210.0
2 David Terrazzo Way 100-102 1020.0
3 Linda NaN NaN
4 George Hamilton St 159 b.A/B 1310.0
5 Jennifer NaN NaN
6 John Henry St 7 D 1080.0
7 Maria Mc-Kenzie Av 40P b.1 1190.0
8 Charles Neptune Av 14 15 b.G 1040.0
9 Helen NaN NaN

我对address 系列特别感兴趣。具体来说,我的目标是将 streetnumberbox 的信息“拆分”为三个不同的 Series。

例如,转换后,第一条和第七条记录/行应如下所示:

| cus_name | street       | number | box | postal_code |
|----------|--------------|--------|-----|-------------|
| James | Main St | 59 | NaN | 1410 |
| Maria | Mc-Kenzie Av | 40P | 1 | 1190.0 |

起初,我不知道如何解决这个问题。在这里做了一些研究之后,我发现了一些使用正则表达式的有趣的相关帖子。

由于我不是 Python 专家(也不是正则表达式专家),我想我可以从识别 address 系列中的模式开始。事实上,每个地址都有以下模式:

  • 位于字符串开头的街道部分。它由一个或多个由空格字符或破折号分隔的单词组成(例如 Mc-Kenzie Av);

  • 位于字符串中间的数字部分。它由一个或多个由空格字符或破折号分隔的字母数字单词组成(例如 100-1027 D);

    /li>
  • 位于字符串末尾的部分。它始终紧跟在 b. 字符之后,由一个包含字母数字字符和可能的一些特殊字符的单词组成(例如 A/BF1)。

我正在寻求帮助以使用正则表达式实现我想要的目标(如果正则表达式是解决方案)。

最佳答案

另一种正则表达式方法:

In [913]: df[['street', 'number', 'box']] = df.address.str.extract(r'(\D+)\s+(\d+[\s-]?(?!b)\w*)(?:\s+b\.)?(\S+)?', expand=True)

In [914]: df
Out[914]:
cus_name address postal_code street number box
0 James Main St 59 1410.0 Main St 59 NaN
1 Mary Yellow Av 11 b.F1 1210.0 Yellow Av 11 F1
2 David Terrazzo Way 100-102 1020.0 Terrazzo Way 100-102 NaN
3 Linda NaN NaN NaN NaN NaN
4 George Hamilton St 159 b.A/B 1310.0 Hamilton St 159 A/B
5 Jennifer NaN NaN NaN NaN NaN
6 John Henry St 7 D 1080.0 Henry St 7 D NaN
7 Maria Mc-Kenzie Av 40P b.1 1190.0 Mc-Kenzie Av 40P 1
8 Charles Neptune Av 14 15 b.G 1040.0 Neptune Av 14 15 G
9 Helen NaN NaN NaN NaN NaN

关于python - 将地址拆分为三个不同系列的正则表达式 [第 1 部分],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57292844/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com