[英]How to extract a word before another word in pandas
我有这个 pandas DataFrame,这是对足球比赛中比赛的描述:
play_id | 类型 | 文本 |
---|---|---|
1 | 经过 | 乔恩完成传球给本。 |
2 | 经过 | 时钟 14:52,乔恩传球给米奇。 |
3 | 匆忙 | 弗兰克·拉什。 |
我的目标是创建一个名为“passer”的新列,其脚本将 go 通过“text”列中的描述,并将采用放在单词“pass”之前的名称。所以我首先使用了这个:
df['passer'] = df['Text'].str.extract(r'(.*?)pass', expand=False).str.strip()
这给了我这个:
play_id | 类型 | 文本 | 过路人 |
---|---|---|---|
1 | 经过 | 乔恩完成传球给本。 | 乔恩 |
2 | 经过 | 时钟 14:52,乔恩传球给米奇。 | 时钟 14:52,乔恩 |
3 | 匆忙 | 弗兰克·拉什。 | 钠 |
它适用于第一个和第三个 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:condlist 中的无效条目 0:应该是 boolean ndarray
有没有办法让这个 function 工作? 这似乎是一个很好的方法,因为在其他情况下,我可以检查三个不同的条件,以便知道要使用哪个正则表达式。
pandas.Series.str.extract
与肯定的前瞻条件一起使用。
lookahead
的全面解释。\s+pass
适用于名称和'pass'
之间的任意数量的空格(例如'Jon PaSs'
)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
尝试使用(?=)
积极的前瞻,一种零宽度断言。 因此,代码将如下所示:
df['passer'] = df['Text'].str.extract(r'(\w+)(?=\spass)', expand=False)
Output:
| 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 |
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.