gpt4 book ai didi

python - 在 Python/pandas 中使用正则表达式查找城市名称

转载 作者:太空宇宙 更新时间:2023-11-04 02:43:30 25 4
gpt4 key购买 nike

我有一个字符串 pandas 中的 DataFrame,其中包含一些随机的字母字符串,后跟一个潜在的城市和州。但是,间距是不规则的。

例如,我有兴趣解析的列看起来像

blah burlingtonvt
blahessex vt
blah dover vt
blahnorthchittendenvt
blah essex junctionvt

用我想保留的一些字母数字字符字符串(每行可能不同)替换每个“blah”,并用数十万个观察结果以及美国大陆各地的城市和州替换。由于状态代码总是出现在末尾,我可以使用像

这样的正则表达式轻松提取它
(ny$|tx$|vt$|...)

其中“...”就是您所期望的其他州。然后我分别处理每个状态的 DataFrame 的每个子集。我有一个列表,列出了我已经制作成正则表达式的给定状态的城市的所有可能的“错误间距”。即,

x = '(essex[ ]{0,1}junction|north[ ]{0,1}chittenden|essex|...)'

此正则表达式中的城市名称变体数量有时会达到数千个。然后我运行以下行

df['city'] = df['string'].str.extract(x, expand=True)

返回

  string                  state   city
1 blah waterbury cenvt vt waterbury
2 blah waterbury vt vt
3 blah waterbury vt vt
4 blah vt vt
5 blah shelburne vt vt
6 blah waterbury vt vt
7 blah richmond vt vt richmond

但如果我运行,例如,

df['city'] = df['string'].str.extract('(waterbury|shelburne|richmond)', expand=True)

结果如愿以偿。为什么会这样?我以编程方式生成正则表达式,所以我想说这不是因为打字错误。会不会是因为要找的东西太多了?有更好的方法吗?

编辑:原来在成千上万的城市名称中隐藏着一个我认为不会存在的空字符串。

最佳答案

考虑以下方法:

In [5]: lst = ['waterbury','shelburne','richmond']

In [6]: pat = '({})'.format('|'.join([r'\b{}\b'.format(x) for x in lst]))

In [7]: pat
Out[7]: '(\\bwaterbury\\b|\\bshelburne\\b|\\brichmond\\b)'

In [8]: df['string'].str.extract(pat, expand=True)
Out[8]:
0
0 waterbury
1 waterbury
2 waterbury
3 NaN
4 shelburne
5 waterbury
6 richmond

关于python - 在 Python/pandas 中使用正则表达式查找城市名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45769231/

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