2017-08-04 66 views
-2

我知道这个问题一直出现。但我发现的潜在解决方案不是PHP或Java,我不知道。我需要这个与Python一起工作。独立街道和熊猫号码

我有一个街道的格式如下:

df = pd.DataFrame({'street':[ 
    'ABC Street', 
    'ABC Street 1', 
    'SDF Street 1a', 
    'KSD Street 30 a', 
    'URR-AC Place 1-5' 
]}) 

而且,哦怎样的惊喜,需要将它们分开,所以我结束了:

street  number 
0 ABC Street NaN 
1 ABC Street 1 
2 SDF Street 1a 
3 KSD Street 30 a 
4 URR-AC Place 1-5 

我的想法并不新鲜。从字符串末尾查找,直到找到最后一个数字并在那里分割字符串。但是str.split可以分割,但是#4将不起作用。我想这是一个正则表达式问题,但我不知道它。

+0

我真的不明白,为什么我对此低估了。这个问题应该很清楚,我举了一个例子。所以,拜托,如果你冷静下来,至少告诉我为什么,所以下次我可以做得更好。谢谢。 – SLglider

回答

0

好吧,对于我的特殊情况,我似乎找到了答案。

首先,我要确保没有领先/跟踪空格:

df.street= df.street.str.strip() 

然后,我提取街道名称。正则表达式的作用是查找一个或多个非数字字符。所以一旦它击中它停止的第一位,从而让我的名字:

要分开的数量,我使用的是相同的功能。但在这里,我正在寻找第一个出现的数字和任何后续字符。

df['number'] = df.street.str.extract('(\d+.*)', expand=False) 

这就导致下面的数据帧:

street    street_name number 
0 ABC Street   ABC Street  NaN 
1 ABC Street 1  ABC Street  1 
2 SDF Street 1a  SDF Street  1a 
3 KSD Street 30 a KSD Street  30 a 
4 URR-AC Place 1-5 URR-AC Place 1-5 

注意:当你有一个街道名称,如“大街-DES-17巨力,5”,其中一些是这将失败名字的一部分。