为了账号安全,请及时绑定邮箱和手机立即绑定

数据框中的文本操作:单词提取

数据框中的文本操作:单词提取

跃然一笑 2022-12-20 09:49:10
我想检查数字旁边的单词。例如,我的数据框中有这一列:RecipesHalve the clementine and place into the cavity along with the bay leaves. Transfer the duck to a medium roasting tray and roast for around 1 hour 20 minutes.Add the stock, then bring to the boil and reduce to a simmer for around 15 minutes.2 heaped teaspoons Chinese five-spice 100 ml Marsala1 litre organic chicken stock我想获得一个新的专栏,我在其中提取它们:New Column[1 hour, 20 minutes]15 minutes2 heaped100 ml1 litre因为我需要与值列表进行比较:to_compare= ["1 hour", "20 litres", "100 ml", "2", "15 minutes", "20 minutes"]查看每行有多少个元素是共同的。谢谢您的帮助。
查看完整描述

2 回答

?
动漫人物

TA贡献1815条经验 获得超10个赞

我们Series.str.extractall与模式一起使用numbers - space - letter。然后我们检查有哪些匹配项to_compare,最后我们使用GroupBy.sum得到有多少匹配项


matches = df['Col'].str.extractall('(\d+\s\w+)')

df['matches'] = matches[0].isin(to_compare).groupby(level=0).sum()


                                                 Col  matches

0  Halve the clementine and place into the cavity...      2.0

1  Add the stock, then bring to the boil and redu...      1.0

2              2 heaped teaspoons Chinese five-spice      0.0

3                                     100 ml Marsala      1.0

4                      1 litre organic chicken stock      0.0

此外,matches返回:


                  0

  match            

0 0          1 hour

  1      20 minutes

1 0      15 minutes

2 0        2 heaped

3 0          100 ml

4 0         1 litre

要将它们放入列表中,请使用:


matches.groupby(level=0).agg(list)


                      0

0  [1 hour, 20 minutes]

1          [15 minutes]

2            [2 heaped]

3              [100 ml]

4             [1 litre]


查看完整回答
反对 回复 2022-12-20
?
慕森卡

TA贡献1806条经验 获得超8个赞

您可以使用正则表达式构建可以提取数字和后续单词的模式,然后将此功能应用于数据框的整个列


import pandas as pd

import re

df = pd.DataFrame({'text':["Halve the clementine and place into the cavity along with the bay leaves. Transfer the duck to a medium roasting tray and roast for around 1 hour 20 minutes.",

           "Add the stock, then bring to the boil and reduce to a simmer for around 15 minutes.",

           "2 heaped teaspoons Chinese five-spice",

           "100 ml Marsala",

           "1 litre organic chicken stock"]})



def extract_qty(txt):

  return re.findall('\d+ \w+',txt)


df['extracted_qty'] = df['text'].apply(extract_qty)


df    

#   text                                                extracted_qty

#0  Halve the clementine and place into the cavity...   [1 hour, 20 minutes]

#1  Add the stock, then bring to the boil and redu...   [15 minutes]

#2  2 heaped teaspoons Chinese five-spice               [2 heaped]

#3  100 ml Marsala                                      [100 ml]

#4  1 litre organic chicken stock                       [1 litre]

to_compare使用列表理解提取常见值:


to_compare= ["1 hour", "20 litres", "100 ml", "2", "15 minutes", "20 minutes"]


df['common'] = df['extracted_qty'].apply(lambda x: [el for el in x if el in to_compare])



#   text                        extracted_qty           common

#0  Halve the clementine ...    [1 hour, 20 minutes]    [1 hour, 20 minutes]

#1  Add the stock, then  ...    [15 minutes]            [15 minutes]

#2  2 heaped teaspoons ...      [2 heaped]              []

#3  100 ml Marsala              [100 ml]                [100 ml]

#4  1 litre organic chicken...  [1 litre]               []


查看完整回答
反对 回复 2022-12-20
  • 2 回答
  • 0 关注
  • 154 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号