使用熊猫整理/整理数据(电话号码)

时间:2018-07-26 16:32:48

标签: python pandas

我有大量不同格式的电话号码,我正尝试将它们全部制成'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”的电话号码。

2 个答案:

答案 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的方法优于我的方法,但是他的方法没有按照我想要的方式格式化数字。如果格式化不是问题,请使用他的方法。