You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用np.where与contains提取DataFrame数据遇NaN问题求助

解决方法

先给你揪出当前代码的问题:

  • 代码里写的是Att_Notes,但实际要处理的是Notes列,这直接导致匹配到了也拿不到数据,返回NaN
  • 正则里的Hit woodwork :带空格,但你的Notes列是无空格拼接的字符串,关键词和冒号之间应该没空格,所以正则要改成不带空格的

单个关键词的修正代码

比如处理"Hit woodwork":

import numpy as np
import pandas as pd

# 修正列名和正则
Players_A['Woodwork'] = np.where(
    Players_A['Notes'].str.contains('Hit woodwork', regex=True),
    Players_A['Notes'].str.extract(r'(?<=Hit woodwork:)(\d)', expand=False),
    0  # 用0代替空字符串,更符合统计列的数字类型
).astype(int)

这里加了expand=False让extract返回Series而不是DataFrame,避免嵌套结构,最后转成int类型保证列是数字格式。

多个关键词的批量处理

如果要处理多个关键词,比如"Hit woodwork"对应"Woodwork"列,"Big chances missed"对应"Big_chances_missed"列,直接写循环更方便:

# 定义关键词和对应列名的映射
keyword_col_map = {
    'Hit woodwork': 'Woodwork',
    'Big chances missed': 'Big_chances_missed'
}

for keyword, col_name in keyword_col_map.items():
    # 构造正则:匹配关键词+冒号后的数字,关键词本身的空格保留(只是不同动作之间无空格)
    regex_pattern = rf'(?<={keyword}:)(\d)'
    # 提取数字,没有匹配到的填0
    Players_A[col_name] = Players_A['Notes'].str.extract(regex_pattern, expand=False).fillna(0).astype(int)

这个方法不管关键词在字符串里的位置在哪,都能精准提取冒号后的数字,而且批量处理更高效。

补充说明

如果你的Notes列里关键词和冒号之间偶尔有空格,正则可以改成rf'(?<={keyword}\s?:)(\d)',\s?表示匹配0或1个空格,兼容性更强。

内容的提问来源于stack exchange,提问作者filipakous

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 02:55:23