如何在pandas中抽取一个单词在另一个单词之前的单词



我已经得到了这个pandas DataFrame,它是对足球比赛中的比赛的描述:

<表类> play_id 类型 文本 tbody><<tr>1通过Jon通过完成本。2pass时钟14时52分,Jon完成传给Mitch。3冲弗兰克。
  • 使用正向向前看条件的pandas.Series.str.extract
    • 参见SO: Regex向前看,向后看和原子组,了解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)

输出:

| 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    |

最新更新