Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 正则表达式将地址分成三个不同的系列[第2部分]_Python_Regex_Pandas_Dataframe - Fatal编程技术网

Python 正则表达式将地址分成三个不同的系列[第2部分]

Python 正则表达式将地址分成三个不同的系列[第2部分],python,regex,pandas,dataframe,Python,Regex,Pandas,Dataframe,这是我关于使用正则表达式将包含地址的pandas系列拆分为三个disctint字段(街道、编号和方框)的继续 我最初的例子如下: 作为pd进口熊猫 将numpy作为np导入 df=pd.DataFrame{'cus_name':['James','Mary','David','Linda','George','Jennifer','John','Maria','Charles','Helen'], ‘地址’:[‘Main St 59’、‘Yellow Av 11 b.F1’、‘Terrazzo

这是我关于使用正则表达式将包含地址的pandas系列拆分为三个disctint字段(街道、编号和方框)的继续

我最初的例子如下:

作为pd进口熊猫 将numpy作为np导入 df=pd.DataFrame{'cus_name':['James','Mary','David','Linda','George','Jennifer','John','Maria','Charles','Helen'], ‘地址’:[‘Main St 59’、‘Yellow Av 11 b.F1’、‘Terrazzo Way 100-102’、‘Hamilton St 159 b.A/b’、‘Henry St 7 D’、‘Mc Kenzie Av 40P b.1’、‘Neptune Av 14 15 b.G’、‘np.nan’, “邮政编码”:[14101201020,np.nan,1310,np.nan,108011901040,np.nan], } printdf 客户姓名地址邮政编码 詹姆斯大街0号59 1410.0 1 Mary Yellow Av 11 b.F1 1210.0 大卫水磨石路2号100-102 1020.0 3琳达楠楠 4乔治汉密尔顿街159号b.A/b 1310.0 5詹妮弗·楠楠 约翰·亨利街6号D 1080.0 7玛利亚麦克肯齐大道40P b.1 1190.0号 8查尔斯海王星大道14 15号b.G 1040.0 9海伦南南 使用RomanPerekhrest给出的解决方案中的正则表达式模式,地址序列很好地拆分为3个所需字段

模式=模式='\D+\s+\D+[\s-]??!b\w*?:\s+b\。\s+?' printdf['address'].str.extractpattern,expand=True 0 1 2 南大街59号0 1黄色Av 11 F1 2水磨石路100-102南 3楠楠楠楠楠 汉密尔顿街4号159 A/B 5楠楠楠楠楠 亨利街6号7 D南 7 Mc肯齐大道40P 1号 8海王星Av 14 15 G 9楠楠楠楠楠 不幸的是,在我之前的帖子中,我没有说明地址只包含街道信息的情况,例如Place de la Monnaie

在这种情况下,上述正则表达式模式不再有效。请参阅regex101链接

我试图修改regex模式半个小时来解释这个案例,但没有成功。我注意到的是,即使数字字段可以有单词字符,但在不丢失时,它总是以数字开头


任何额外的帮助都将不胜感激

此模式有助于:

(\D+)\s((\d+[\s-]?(?!b)\w*)(?:\s+b\.)?(\S+)?)*

你不能把这个号码也设为可选的吗?很抱歉,我没有时间简化这个正则表达式,但它应该可以工作:\D+$\124;\ D+\s+\D+[\s-]??!b\w*?:\s+b\.?\s+?不幸的是,当数字和方框信息丢失时,它不起作用。系列