首页 > 解决方案 > 使用 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 = {  '.': ' ',
        ')': '',
        '(': '',
        '-': ' '
    }

我已经尝试以多种方式通过 pandas 传递这本字典,但我似乎无法让它工作,它总是返回一个未经编辑的列表。我敢肯定这是一个简单的修复,我错过了一些非常基本的东西。

temporary['number'] = temporary['number'].replace(d1)

这将返回一个错误,但是,我相信它显示了我正在努力实现的想法。这会将“numbers”中的电话号码替换为“1 123 123 1234”形式的电话号码。

标签: pythonpandas

解决方案


    dic = {'number': {'\)': '', '\(': '', '-': ' ', '\.': ' '}
           }

    temporary = temporary.replace(dic, value=None, regex=True)

完全返回我在 OP 中要求的内容。我使用嵌套字典将字典传递给 .replace() 函数。

为了使用嵌套字典,您必须设置 value=None,我还需要使用 regex=True。

由于搜索')' '(' 和'.',使用正则表达式会给你带来很多错误。你必须在它们前面放置一个'\'作为字符转义。

詹姆斯的方法优于我的方法,但他的方法并没有按照我想要的方式格式化数字。如果格式化不是问题,请使用他的方法。


推荐阅读