代码之家  ›  专栏  ›  技术社区  ›  user9092346

将re应用于pandas数据帧

  •  0
  • user9092346  · 技术社区  · 6 年前

    !!目的是将工作方法应用于pandas数据帧中的文本!!

    鉴于我有如下句子:

    “他邀请了两个人,养了三条狗。”

    “她邀请了三个朋友,养了一只猫。”

    每句话我都想用一个变量来计算有多少人被邀请,有多少宠物是宠物。这很容易通过regex实现:

    sentence = 'He invited 2 people and pet 3 dogs.'
    
    human = [r'(\d+) people', r'(\d+) friend']
    
    for h in human:
        number = re.search(h, sentence, re.IGNORECASE)
        if number is not None:
            number = number.group(1)
    
    print('humans invited: ',number)
    

    现在,句子在“句子”列的pandas数据框中。数据框中还有一个名为“人类”的列和一个名为“宠物”的列。我现在要把第一句话,像上面所示的那样处理,把人类的结果写进“人类”栏,对宠物做同样的事情,把它写进宠物栏。但是,我不知道如何将此应用于pandas数据帧的逐行。

    2 回复  |  直到 6 年前
        1
  •  2
  •   Ben.T    6 年前

    对于熊猫,你可以使用 str.extract 例如:

    df['humans'] = df['sentence'].str.extract('(\d+) (?:people|friend)', re.IGNORECASE, expand=False)
    

    宠物也一样

        2
  •  2
  •   ALollz    6 年前

    如果句子中只有两个数字而你总是期望 humans 来之前 pets 你可以一次得到全部:

    df[['humans', 'pets']] = df.sentence.str.extract('(\d+).*?(\d+)', expand=True)
    

    df 现在是:

                                              sentence humans    pets
    0              He invited 2 people and pet 3 dogs.      2       3
    1             She invited 3 friends and pet 1 cat.      3       1
    2        She invited 13 friends and pet 145 frogs.     13     145
    3  She invited 11243 friends and pet 141415 frogs.  11243  141415