gpt4 book ai didi

python - 如何在 Pandas 中的另一个词之前提取一个词

转载 作者:行者123 更新时间:2023-12-05 03:45:10 25 4
gpt4 key购买 nike

我有这个 pandas DataFrame,它描述了一场足球比赛中的比赛:

<表类="s-表"><头>play_id类型正文<正文>1通过Jon 将球传给 Ben。2通过时钟 14:52,Jon 将球传给 Mitch。3冲刺弗兰克·拉什。

我的目标是创建一个名为“passer”的新列,其中包含一个脚本,该脚本将遍历“text”列中的描述,并将采用放在“pass”一词之前的名称。所以我首先使用这个:

df['passer'] = df['Text'].str.extract(r'(.*?)pass', expand=False).str.strip()

这给了我这个:

<表类="s-表"><头>play_id类型正文路人<正文>1通过Jon 将球传给 Ben。乔恩2通过时钟 14:52,Jon 将球传给 Mitch。时钟 14:52,乔恩3冲刺弗兰克·拉什。NaN

它适用于第一个和第三个 playid,但不适用于第二个,因为它需要时钟,有时可以包含在描述中。

我尝试在创建我的专栏时实现条件,其中代码检查描述中是否包含“时钟”,并使用正确的正则表达式,但这不起作用:

conditions = [
(np.where(df.Text.str.contains('Clock', case=False))),
(np.where(~df.Text.str.contains('Clock', case=False)))
]

choices = [
df['Text'].str.extract(r', (.*?) pass', expand=False).str.strip(),
df['Text'].str.extract('(.*?) pass', expand=False).str.strip()
]

df['passerNEW'] = np.select(conditions, choices, default='NaN')
df

我收到以下错误:

TypeError: invalid entry 0 in condlist: should be boolean ndarray

有没有办法让这个功能起作用?这似乎是一个很好的方法,因为在其他情况下,我可以检查三个不同的条件,以便知道要使用哪个正则表达式。

最佳答案

  • 使用pandas.Series.str.extract具有积极的前瞻条件。
  • flags=re.IGNORECASE用于忽略'pass'的大小写
    • df.Text.str.lower().str.extract('(\w+(?=\s+pass))') 可以用来代替导入 re 为旗帜。
import pandas as pd
import re

# test dataframe
data = {'play_id': ['1', '2', '3'], 'type': ['pass', 'pass', 'rush'], 'Text': ['Jon PASS complete to Ben.', 'Clock 14:52, Jon pass complete to Mitch.', 'Frank rush.']}
df = pd.DataFrame(data)

# display(df)
play_id type Text
1 pass Jon PASS complete to Ben.
2 pass Clock 14:52, Jon pass complete to Mitch.
3 rush Frank rush.

# extract
df['passer'] = df.Text.str.extract('(\w+(?=\s+pass))', flags=re.IGNORECASE)

# display(df)
play_id type Text passer
1 pass Jon PASS complete to Ben. Jon
2 pass Clock 14:52, Jon pass complete to Mitch. Jon
3 rush Frank rush. NaN

关于python - 如何在 Pandas 中的另一个词之前提取一个词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66049688/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com