【发布时间】:2014-03-31 09:39:41
【问题描述】:
假设我以 Series 的未格式化电话号码(作为字符串)开头,我想将它们格式化为 (XXX) YYY-ZZZZ。
我可以使用正则表达式和str.match 或str.extract 获取输入的子组件。我可以使用以下任一结果执行格式化:
ser = pd.Series(data=['1234567890', '2345678901', '3456789012'])
matched = ser.str.match(r'(\d{3})(\d{3})(\d{4})')
extracted = ser.astype(str).str.extract(r'(?P<first>\d{3})(?P<second>\d{3})(?P<third>\d{4})')
formatmatched = matched.apply(lambda x: '({0}) {1}-{2}'.format(*x))
print 'formatmatched'
print formatmatched
formatextracted = extracted.apply(lambda x: '({first}) {second}-{third}'.format(**x.to_dict()), axis=1)
print 'formatextracted'
print formatextracted
结果:
formatmatched
0 (123) 456-7890
1 (234) 567-8901
2 (345) 678-9012
dtype: object
formatextracted
0 (123) 456-7890
1 (234) 567-8901
2 (345) 678-9012
dtype: object
是否有一种矢量化方式可以在任一上下文中应用该格式化命令?
【问题讨论】:
标签: python string formatting pandas