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
相关产品推荐
相关产品推荐

