我有一个带有地址列的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