将re应用于Pandas Dataframe

时间:2018-06-13 14:10:47

标签: python regex pandas

!!目的是将工作方法应用于Pandas Dataframe !!中的文本。

鉴于我有以下句子:

“他邀请了2个人并养了3只狗。”

“她邀请了3个朋友和宠物1只猫。”

对于每个句子,我想在变量中计算邀请了多少人以及有多少宠物是宠物。这可以通过正则表达式轻松实现:

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 Dataframe中。 Dataframe还有一个名为“human”的列和一个名为“pets”的列。我现在想要采用第一句话,如上所示处理它,将人类的结果写入“人类”栏目,对宠物做同样的事情并将其写入栏目宠物。但是,我不确定如何逐行将其应用于Pandas Dataframe。

2 个答案:

答案 0 :(得分:2)

使用pandas,您可以使用str.extract,例如:

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

和宠物一样

答案 1 :(得分:2)

如果句子中只有2个数字,并且您始终希望humanspets之前出现,那么您可以立即获得所有数字:

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