【问题标题】:Extracting particular characters/ text from DataFrame column从 DataFrame 列中提取特定字符/文本
【发布时间】:2019-12-08 00:16:14
【问题描述】:

我正在尝试从数据框的邮件列中获取电子邮件提供商并创建一个名为“Mail_Provider”的新列。例如,从 a@gmail.com 获取 gmail 并将其存储在“Mail_Provider”列中。此外,我想从 Phone 列中提取 Country ISD 并为此创建一个新列。除了正则表达式之外,还有其他直接/更简单的方法吗?

data = pd.DataFrame({"Name":["A","B","C"],"mail": 
["a@gmail.com","b@yahoo.com","c@gmail.com"],"Adress": 
["Adress1","Adress2","Adress3"],"Phone":["+91-1234567890","+88- 
0987654321","+27-2647589201"]})

表格

Name   mail        Adress       Phone

A    a@gmail.com   Adress1  +91-1234567890
B    b@yahoo.com   Adress2  +88-0987654321
C    c@gmail.com   Adress3  +27-2647589201

预期结果:-

Name   mail        Adress       Phone        Mail_Provider   ISD

A    a@gmail.com   Adress1  +91-1234567890    gmail           91
B    b@yahoo.com   Adress2  +88-0987654321    yahoo           88
C    c@gmail.com   Adress3  +27-2647589201    gmail           27

【问题讨论】:

    标签: python string pandas dataframe


    【解决方案1】:

    正则表达式相当简单:

    data['Mail_Provider'] = data['mail'].str.extract('\@(\w+)\.')
    
    data['ISD'] = data['Phone'].str.extract('\+(\d+)-')
    

    如果您真的想避免使用正则表达式,@Eva 的答案将是您的最佳选择。

    【讨论】:

      【解决方案2】:

      混合方法(正则表达式和简单切片):

      In [693]: df['Mail_Provider'] = df['mail'].str.extract('@([^.]+)')
      
      In [694]: df['ISD'] = df['Phone'].str[1:3]
      
      In [695]: df
      Out[695]: 
        Name         mail   Adress           Phone Mail_Provider ISD
      0    A  a@gmail.com  Adress1  +91-1234567890         gmail  91
      1    B  b@yahoo.com  Adress2  +88-0987654321         yahoo  88
      2    C  c@gmail.com  Adress3  +27-2647589201         gmail  27
      

      【讨论】:

      • 我的猜测是 ISD 可以是 1 到 3 位数字,这也是我使用正则表达式的原因。
      • @QuangHoang,在这种情况下,我依赖于 OP 的请求“除正则表达式之外的其他直接/更简单的方法”。我对正则表达式方法没有任何问题(如果需要)
      • 哈,我完全忽略了那条信息。
      【解决方案3】:

      一个 lambda 函数可以工作

      data['Mail_Provider'] = data['mail'].apply(lambda x: x.split("@")[1].split(".")[0])
      
      data['ISD'] = data['Phone'].apply(lambda x: x.split("+")[1].split("-")[0])
      

      【讨论】:

        猜你喜欢
        • 2012-03-30
        • 1970-01-01
        • 1970-01-01
        • 2022-09-23
        • 1970-01-01
        • 2018-04-05
        • 1970-01-01
        • 2020-04-26
        • 2021-04-05
        相关资源
        最近更新 更多