【问题标题】:Extract multiple occurrences of string from dataframe column and parse into separate columns从数据框列中提取多次出现的字符串并解析为单独的列
【发布时间】:2019-09-07 04:53:16
【问题描述】:

场景

我正在将一个数据框列中的数据解析为多个数据框列。具体来说,我想从一列充满电子邮件的列中解析出所有电话号码。解析出电话号码后,我想从原始电子邮件列中删除这些电话号码。

我的尝试

我从数据框中的一列开始,称为“电子邮件”,其中包含电子邮件。

我能够使用正则表达式成功解析出第一次出现的电话号码,其中包含以下行:

df['phone_num_1'] = df['email'].str.extract('(\(?\d\d\d\)?-? ?\.?\d\d\d-?\.?\d\d\d\d?)')

再次运行此行,但使用新的列名,再次捕获原始电话号码...

我可以使用以下行删除所有个电话号码:

df['email'] = df['email'].replace('(\(?\d\d\d\)?-? ?\.?\d\d\d-?\.?\d\d\d\d?)', '', regex = True)

现在所有的电话号码都不见了,我丢失了第二个电话号码。

我需要什么帮助

如果在我的原始电子邮件列中出现两次电话号码,我如何捕获第二次出现?理想情况下,我希望将第二次出现的电话号码解析到自己的列中。

最后,我会有 3 列:email、phone_num_1、phone_num_2

电子邮件列将不再有任何电话号码。

提前感谢您的帮助!

从数据框添加示例电子邮件

电子邮件列可能包含具有以下字符串的单元格:

安装了新的热泵。系统已启动并运行,没有泄漏。给 新热泵的租户定位。安装了新的 Aqua cal 热泵 电子邮件:example@domain.com |电话:(123) 456-7890 泳池加热器不是 在职的。请致电 234.567.8901 联系居民。供应商付费 水池/水疗加热器设备水池/水疗 10088

注意两个唯一的电话号码

我需要从该字符串中提取每个电话号码并将其放入它们自己的列中。

【问题讨论】:

  • @Emma 我不确定你的意思。您是在询问电子邮件示例吗?
  • 向我们展示您的数据框和一些数据
  • 我会做以下事情:1)从列中提取所有电子邮件并将它们存储到名为“电话”的单独列中; 2)提取所有电子邮件并将它们存储到名为“电子邮件”的单独列中; 3)提取任何你想要的...... 4)删除原始列

标签: python regex pandas extract


【解决方案1】:

抱歉,由于缺少有关您的数据框的信息,我不明白您的意图。但是,由于您在捕获第二个电话号码时遇到问题,它可能会帮助您找出正则表达式。我让它识别电子邮件、1 号电话和 2 号电话。

data = ({"Email":["Installed new heat pump. System is up and running with no leaks. Gave tenant orientation on new heat pump. installed new aqua cal heat pump Email: example@domain.com | Phone: (123) 456-7890 pool heater is not working. Please contact resident at 234.567.8901. Vendor Paid Pool/Spa Heater Equipment Pool/Spa 10088"]})
df = pd.DataFrame(data)

for item in df['Email']:
    reg = re.search(r"(?P<email>\S+\@\S+)\D+(?P<ph1>\d{3}[\D]+\d{3}[\D]+\d{4})?.*(?P<ph2>\d{3}[\D]+\d{3}[\D]+\d{4})",item)
    print(list(reg.groups()))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多