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

DataFrame列处理问题:提取指定词汇至新列,无匹配时填充原文本

解决DataFrame中提取指定词汇并填充原文本的问题

我明白你的问题了——当前代码在localisation列没有匹配到目标词汇时,word列会变成空值,而你需要这时候填入localisation的完整文本。咱们来修正这个问题:

问题根源

str.extract()方法在没有找到匹配内容时会返回NaN,而你之前的代码没有处理这些空值,导致最终word列出现缺失。

解决方案

我们可以先用str.extract()提取目标词汇,再用fillna()把空值替换成localisation列的完整内容。如果你的temp列是必须的(用于先从localisation中提取特定片段),可以这样修改:

# 保留你原来的temp列提取逻辑
df["temp"] = df["localisation"].str.extract("Localisation[\s]*:.*\n([^_\n]{3,})\n[^\n]*\n", expand=False)

# 提取目标词汇到word列
df["word"] = df["temp"].str.extract("(SECTION 11|CÔNE|BELLY)", expand=False)

# 将空值替换为localisation列的完整文本
df["word"] = df["word"].fillna(df["localisation"])

如果你不需要保留temp列,也可以直接从localisation列提取并填充,简化代码:

# 直接从localisation提取目标词汇
df["word"] = df["localisation"].str.extract("(SECTION 11|CÔNE|BELLY)", expand=False)

# 填充空值为原localisation文本
df["word"] = df["word"].fillna(df["localisation"])

另外,如果你想更清晰地控制逻辑,也可以用numpy.where()来实现:

import numpy as np

# 先提取temp列
df["temp"] = df["localisation"].str.extract("Localisation[\s]*:.*\n([^_\n]{3,})\n[^\n]*\n", expand=False)

# 判断temp中是否包含目标词汇,是则提取,否则用原localisation文本
df["word"] = np.where(
    df["temp"].str.contains("SECTION 11|CÔNE|BELLY", na=False),
    df["temp"].str.extract("(SECTION 11|CÔNE|BELLY)", expand=False),
    df["localisation"]
)

关键点说明

  • expand=False确保str.extract()返回Series而不是DataFrame,方便后续处理
  • fillna()会自动将所有NaN值替换为指定列的内容
  • str.contains()中的na=False是为了避免当temp列本身有空值时出现判断错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 22:47:44