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

DataFrame列提取指定单位文本结果全为NaN问题排查

问题分析与解决

原代码的核心问题

  • 列名不匹配:你的DataFrame目标列是full_name,但代码中使用了filtered_df['text'],这会导致无法定位到正确的文本列,直接返回全量NaN。
  • 硬编码索引逻辑错误:iloc[:,1]强制取逗号分割后的第二列(索引从0开始),但目标单位Km2/W所在的分段位置不固定(比如你的示例中它在第5个分段,索引为4),硬编码索引完全不具备通用性。
  • 提取逻辑错位:先固定取某一列再执行提取操作,而该列本身不包含目标单位,自然无法提取到有效内容。

正确实现方案

方案1:遍历分段匹配目标单位

这种方式逻辑直观,适合初学者理解:

search_string = 'Km2/W'

def extract_target_segment(text):
    # 分割文本并去除每个分段的首尾空格
    segments = [seg.strip() for seg in text.split(',')]
    # 遍历找到包含目标单位的分段
    for seg in segments:
        if search_string in seg:
            return seg
    return None

# 应用函数到目标列
filtered_df['extracted_text'] = filtered_df['full_name'].apply(extract_target_segment)

方案2:正则表达式直接匹配(更高效)

利用正则精准匹配包含目标单位的完整逗号分段:

import re

search_string = 'Km2/W'
# 正则规则:匹配位于逗号前后或字符串首尾、包含目标单位的完整分段
pattern = rf'(?<=,|^)\s*[^,]*{re.escape(search_string)}[^,]*\s*(?=,|$)'

# 提取并清理结果
filtered_df['extracted_text'] = filtered_df['full_name'].str.extract(pattern, expand=False).str.strip()

两种方案都能准确提取出2.25 Km2/W这类包含目标单位的完整分段,后续你可以通过filtered_df['extracted_text'].str.extract(r'(\d+\.?\d*)').astype(float)提取数值并转为数值类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 00:12:34