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 = { '.': ' ',
')': '',
'(': '',
'-': ' '
}
我已经尝试以多种方式通过 pandas 传递这本字典,但我似乎无法让它工作,它总是返回一个未经编辑的列表。我敢肯定这是一个简单的修复,我错过了一些非常基本的东西。
temporary['number'] = temporary['number'].replace(d1)
这将返回一个错误,但是,我相信它显示了我正在努力实现的想法。这会将“numbers”中的电话号码替换为“1 123 123 1234”形式的电话号码。
解决方案
dic = {'number': {'\)': '', '\(': '', '-': ' ', '\.': ' '}
}
temporary = temporary.replace(dic, value=None, regex=True)
完全返回我在 OP 中要求的内容。我使用嵌套字典将字典传递给 .replace() 函数。
为了使用嵌套字典,您必须设置 value=None,我还需要使用 regex=True。
由于搜索')' '(' 和'.',使用正则表达式会给你带来很多错误。你必须在它们前面放置一个'\'作为字符转义。
詹姆斯的方法优于我的方法,但他的方法并没有按照我想要的方式格式化数字。如果格式化不是问题,请使用他的方法。
推荐阅读
- javascript - React Context Provider 尽可能靠近消费者
- django - 使用本机反应时,Django Rest API 仅在 iOS 上返回 403 错误
- java - 更新@OneToMany 关系(Spring Boot、Spring Data)
- javascript - 如何使用 JS 在 HTML 中定位特定的 span 标签
- r - 问:boxTidwell - 关于基本完美贴合的错误
- javascript - 我如何在 caporal js 中打印一个数字
- angular - 在 VSCode 中运行的 Angular 调试会话中未命中断点
- python - 如何使用用户输入在 Django 中命名对象?
- node.js - (节点:14000)UnhandledPromiseRejectionWarning:DiscordAPIError:无法发送空消息
- loops - 如何在 SPSS 上创建以下变量?