我有大量不同格式的电话号码,我正尝试将它们全部制成'1 123 123 1234'的形式。有效地删除所有方括号,点和破折号。我在下面写了一些例子。
123 123-123-123
(123) 123-1234
(123) 123 1234
1.123.123.1234
1(123)123-1234
(123)123-1234
1 123 123 1234
1-123-123-1234
下面的代码将我的数据转换成我想要的格式,但我想知道是否存在“更整洁”或更有效的处理方式,例如使用字典
temporary['number'] = temporary['number'].str.replace('.', ' ')
temporary['number'] = temporary['number'].str.replace(')', '')
temporary['number'] = temporary['number'].str.replace('(', '')
temporary['number'] = temporary['number'].str.replace('-', ' ')
使用的词典是
d1 = { '.': ' ',
')': '',
'(': '',
'-': ' '
}
我曾尝试通过多种方式将这本词典传递给熊猫,但我似乎无法使其正常工作,它总是返回未编辑的列表。我确信这是一个简单的修复程序,并且我缺少一些非常基本的东西。
temporary['number'] = temporary['number'].replace(d1)
这将返回一个错误,但是,我相信它表明了我正在尝试实现的想法。这样会将“数字”中的电话号码替换为格式为“ 1 123 123 1234”的电话号码。
答案 0 :(得分:0)
您可以传递正则表达式以删除除数字和空格之外的所有字符
temporary['number'] = temporary['number'].str.replace('[^\d ]','')
答案 1 :(得分:0)
dic = {'number': {'\)': '', '\(': '', '-': ' ', '\.': ' '}
}
temporary = temporary.replace(dic, value=None, regex=True)
精确返回我在OP中的要求。我使用嵌套字典将字典传递到.replace()函数。
要使用嵌套字典,必须将value设置为None,我还需要使用regex = True。
由于要搜索')''('和'。',因此使用正则表达式会给您带来许多错误。您必须在其前面放置一个'\'以防止字符转义。
James的方法优于我的方法,但是他的方法没有按照我想要的方式格式化数字。如果格式化不是问题,请使用他的方法。