在对列应用Regex之后返回连续输出



我有一个带有地址列的df,我正在使用regex提取邮政编码

df结构:

ID    Address
1     #1321, street 24, US 123 423
2     oppo. post office, ghana 4355 523

我的代码:

df['pin1'] = df['ADDRESS'].str.extract(r'(d{3}sd{3})')

代码运行良好,问题是我需要列下的值作为连续数字

当前输出:

ID    Address                            pin1
1     #1321, street 24, US 123 423       123 423
2     oppo. post office, ghana 4355 523  4355 523

预期输出:

ID    Address                            pin1
1     #1321, street 24, US 123 423       123423
2     oppo. post office, ghana 4355 523  4355523

我尝试了以下操作,但出现错误:

df['pin'] = str.strip(df['ADDRESS'].str.extract(r'(d{3}sd{3})'))

错误:

描述符"strip"需要"str"对象,但收到了"Series"

有很多方法可以做到这一点,最简单的是对str.replace:进行额外调用

In [169]:
df['Address'].str.extract(r'(d{3}sd{3})').str.replace(" ","")
Out[169]:
0    123423
1    355523
Name: Address, dtype: object

你也可以split,然后是join,但考虑到以上情况,这太过分了:

In [172]:
df['Address'].str.extract(r'(d{3}sd{3})').str.split(' ').str.join('')
Out[172]:
0    123423
1    355523
dtype: object

另外:

df['pin'] = str.strip(df['ADDRESS'].str.extract(r'(d{3}sd{3})'))

这里的错误是str不理解panda Series对象,即使您使用以下命令调用apply

In [178]:
df['Address'].str.extract(r'(d{3}sd{3})').apply(str.strip)
Out[178]:
0    123 423
1    355 523
Name: Address, dtype: object

它仍然不起作用,这就是为什么您需要调用str.split,然后调用str.join,就像我的第二个代码片段

中一样

您需要替换空间来摆脱它:

df['pin1'] = df['ADDRESS'].str.extract(r'(d{3}sd{3})').str.replace(" ","")

您可以replace任意空白-带有空字符串的s*

df['pin1'] = df['Address'].str.extract(r'(d{3}sd{3})').str.replace("s*","")
print df
   ID                            Address    pin1
0   1       #1321, street 24, US 123 423  123423
1   2  oppo. post office, ghana 4355 523  355523

最新更新