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

如何在熊猫中搜索单独列的文本匹配项?

如何在熊猫中搜索单独列的文本匹配项?

慕姐4208626 2023-01-04 16:07:16
我有一个如下所示的数据框(原始):      Player Name       Headline1     LeBron James      LeBron James suggests 5-10 games before playoff2     LeBron James      LeBron James (groin) probable for Thursday 3     LeBron James      LeBron James overcomes Pelicans with 34/13/124     LeBron James      Kyrie Irving (groin) plans to play on Tuesday   5     LeBron James      LeBron James (rest) questionable Tuesday      6     LeBron James      LeBron James (leg) will start on Saturday   7     LeBron James      Kevin Love (hip) is questionable 8     Ryan Anderson     Anderson (flu) returns against Cavs on Sunday   9     Ryan Anderson     Ryan Anderson out with respiratory infection   10    Ryan Anderson     Anderson (rest) not playing (text)我想删除标题列中没有的所有行。Injury/Rest另外,我想在Location下面标记两个新列。这就是我为实现这一目标所做的工作:df['Location'] = df.Headline.str.extract('\((.*)\)')[0]df = df[df['Location'].notnull()]df['Injury/Rest'] = np.where(df['Location'].eq('rest'), 'Rest', 'Injury')新输出:        Player Name    Headline                                       Location    Injury/Rest    --  -------------  ---------------------------------------------  ----------  -------------     2  LeBron James   LeBron James (groin) probable for Thursday     groin       Injury     4  LeBron James   Kyrie Irving (groin) plans to play on Tuesday  groin       Injury     5  LeBron James   LeBron James (rest) questionable Tuesday       rest        Rest     6  LeBron James   LeBron James (leg) will start on Saturday      leg         Injury     7  LeBron James   Kevin Love (hip) is questionable               hip         Injury     8  Ryan Anderson  Anderson (flu) returns against Cavs on Sunday  flu         Injury    10  Ryan Anderson  Anderson (rest) not playing                    rest        Rest
查看完整描述

2 回答

?
拉丁的传说

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

您可以使用 str.extract 使用模式提取所有匹配项,


df = df.assign(**df['Headline'].str.extract('(?P<Headline_Player>.*)\s\((?P<Location>.*)\)\s(?P<Status>.*)'))

df = df.dropna()

df['Injury/Rest'] = np.where(df['Location'].eq('rest'), 'Rest', 'Injury')




    Player Name     Headline                                    Headline_Player Location    Status                  Injury/Rest

1   LeBron James    LeBron James (groin) probable for Thursday      LeBron James    groin   probable for Thursday   Injury

3   LeBron James    Kyrie Irving (groin) plans to play on Tuesday   Kyrie Irving    groin   plans to play on Tuesday    Injury

4   LeBron James    LeBron James (rest) questionable Tuesday        LeBron James    rest    questionable Tuesday    Rest

5   LeBron James    LeBron James (leg) will start on Saturday       LeBron James    leg     will start on Saturday  Injury

编辑:要处理像 Unfortunately to hear that LeBron James (groin) probably for Thursday) 这样的边缘情况,您可以使用正则表达式提取两个由空格分隔的字符串。如果名称是两个字符串的形式,这将严格起作用。


df.assign(**df['Headline'].str.extract('(?P<Headline_Player>\w+\s\w+)\s\((?P<Location>.*)\)\s(?P<Status>.*)'))



查看完整回答
反对 回复 2023-01-04
?
UYOU

TA贡献1878条经验 获得超4个赞

这个怎么样?


df_new = df[df.Headline.str.contains('\(')].copy()

df_new['Headline_Player'] = df_new.Headline.apply(lambda x: x.split('(')[0])

df_new['Location']=df.Headline.str.extract('\((.*)\)')[0]

df_new['Injury/Rest'] = np.where(df_new['Location'].eq('rest'), 'Rest', 'Injury')

df_new['Status'] = df_new.Headline.apply(lambda x: x.split(')')[1])

df_new

输出


Player Name     Headline                                      Headline_Player   Location    Injury/Rest     Status

LeBron James    LeBron James (groin) probable for Thursday    LeBron James      groin   Injury  probable for Thursday

LeBron James    Kyrie Irving (groin) plans to play on Tuesday Kyrie Irving      groin   Injury  plans to play on Tuesday

LeBron James    LeBron James (rest) questionable Tuesday      LeBron James      rest    Rest    questionable Tuesday

LeBron James    LeBron James (leg) will start on Saturday     LeBron James      leg     Injury  will start on Saturday

LeBron James    Kevin Love (hip) is questionable              Kevin Love        hip     Injury  is questionable

Ryan Anderson   Anderson (flu) returns against Cavs on Sunday Anderson          flu     Injury  returns against Cavs on Sunday

Ryan Anderson   Anderson (rest) not playing                   Anderson          rest    Rest    not playing



查看完整回答
反对 回复 2023-01-04
  • 2 回答
  • 0 关注
  • 87 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信