如何从给定的地址和特定列中仅提取pin码和城市,并将其分配到名为“城市”和“地址”的两个新列中。这与python中的regex配合得很好,有没有其他快速运行的方法,因为10000行需要6分钟以上的时间。你知道吗
地址示例:87 F/F Place Opp. C-2, Uttam Nagar NA Delhi 110059 Delhi
pincoderegex=re.compile(r'([\w]*)[\s]([\d]{6})')
pincoderegex.search(ref).group() --- > o/p : 'Delhi 110059'
pincoderegex.search(data_rnr['BORROWER ADDRESS'][80]).groups()[1] ---> o/p:'700105'
data_rnr['BORROWER CITY_NAME']='default value'
data_rnr['BORROWER CITY_PINCODE']='default value'
for i in range(0,len(data_rnr['BORROWER ADDRESS'])):
try:
data_rnr['BORROWER CITY_NAME'][i]=pincoderegex.search(data_rnr['BORROWER ADDRESS'][i]).groups()[0]
data_rnr['BORROWER CITY_PINCODE'][i]=pincoderegex.search(data_rnr['BORROWER ADDRESS'][i]).groups()[1]
except TypeError:
print('TypeError')
except NameError:
print('NameError')
except AttributeError:
print('AttributeError')
except:
pass
输出将添加到新的Df列data_rnr['BORROWER CITY_NAME']
和data_rnr['BORROWER CITY_PINCODE']
根据@Olivier Hao给出的最佳模式的答案:
\s([\w]+)\s([\d]{6})
,您可以只使用Pandas获得更快的单行代码:请注意,我在regex模式中直接命名了组来创建新列。你知道吗
代码的唯一区别是,在新的create列中没有
default value
,而是在找不到模式的地方有NaN
个值。你知道吗我使用了以下数据样本:
使用您的代码,在更改模式并删除需要大量计算时间的打印后,我得到以下结果:
使用单行代码我得到了这个结果:
但是,如果您绝对希望填充
NaN
值,则需要更多的时间(仍然比代码快):我使用的函数的文档:
([\w]*)[\s]([\d]{6})
需要398个步骤([\w]+)\s([\d]{6})
需要290个步骤\b([\w]+)\s([\d]{6})
需要174个步骤\s([\w]+)\s([\d]{6})
需要131个步骤因此,您可以使用
\s([\w]+)\s([\d]{6})
来提高效率https://regex101.com/r/iLIXDI/1
相关问题 更多 >
编程相关推荐