numpy 使用np.where和contains,将regex子字符串分发到相应的列

4xrmg8kj  于 11个月前  发布在  其他
关注(0)|答案(1)|浏览(115)

对每个人来说都很麻烦。我已经为我目前的任务累了好几天了,我希望有人能提供帮助。我有一个玩家统计的框架,每个统计类别都用数字和/或零填充。问题在于列**“注解”,它包含了一个动作的描述,如果它发生了。当一个玩家有两个不同的动作时,单元格内容与没有空格的背靠背字符串不一致。我尝试做的是:
1.搜索包含单词的列,例如
“woodwork”**
1.提取下面的数字后的codeon(只有)
1.将其分配给已存在的相应命名的列。
1.继续下一个关键字,例如**“错过的机会很大”**总是考虑到它的位置是永远不固定的。

到目前为止,我已经尝试过:

Players_A['Woodwork'] = np.where(Players_A['Notes'].str.contains('Hit woodwork', regex= True), Players_A['Att_Notes'].str.extract(r'(?<=Hit woodwork :)(\d)'), '')

字符串
该代码返回Nan作为匹配值
dataframe

iyzzxitl

iyzzxitl1#

你的正则表达式中有一个问题。下面是更正后的代码:

df["Woodwork"] = np.where(df['Notes'].str.contains('Hit woodwork', regex=False), df['Notes'].str.extract(r'(?<=Hit woodwork: )(\d+)', expand=False), '')
df["Big_Chances"] = np.where(df['Notes'].str.contains('Big chances missed', regex=False), df['Notes'].str.extract(r'(?<=Big chances missed: )(\d+)', expand=False), '')
df

字符串

输出:

| Pl_Name|注意到|木制品|Msd笔|大_机会|创建|
| --|--|--|--|--|--|
| 莱尼·约罗|- -一种|||||
| 蒂亚戈·桑托斯|- -一种|||||
| 亚当·乌纳斯|击中木制品:1| 1 ||||
| Alexandria ·里贝罗|- -一种|||||
| Nabil Bentaleb|- -一种|||||
| 埃东·热格罗娃|错过的大机会:1||| 1 ||
| 伊斯梅伊|- -一种|||||
| 雷米·卡贝拉|击中木制品:1错过的大机会:1| 1 || 1 ||
| 本杰明·安德烈|- -一种|||||
| 安赫尔·戈麦斯|- -一种|||||
| 伊万·卡瓦略|- -一种|||||
| 卢卡斯·谢瓦利埃|- -一种|||||
| Samuel Umtiti|- -一种|||||
| 约拿单大卫|错过的大机会:2||| 2 ||

注意事项

我已经将正则表达式模式(\d)更改为(\d+),以确保如果"Notes"值的数值包含多个数字,extract方法将检索所有数字,而不仅仅是第一个数字。换句话说,如果您有一个像"Hit woodwork: 15"这样的值,添加"+"以确保数字"15"被提取而不是仅数字"1"

相关问题