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

如何根据Pandas DataFrame的String列填充Pet列并保留空行

问题描述

我有如下Pandas DataFrame:

IDStringPet
1this is a cat
2hello dog

我希望从String列提取宠物名称,以此填充Pet列,且第三行需保持为空,不被默认填充。

我的尝试代码:

df['Pet'] = np.where(df['String'].str.contains("cat"), "cat", np.where(df['String'].str.contains("dog"), "dog", '0'))

但遗憾的是,空行(第三行)也被填充了,请求帮助解决该问题。


解决方案

你的代码问题在于最后一层np.where把所有不匹配cat/dog的情况都填成了'0',包括空行。要保留空行的话,得先判断String列是否为空,再处理匹配逻辑:

方法一:补上空值判断的嵌套逻辑

import numpy as np
import pandas as pd

# 构造示例DataFrame
df = pd.DataFrame({
    'ID': [1, 2, None],
    'String': ['this is a cat', 'hello dog', None],
    'Pet': ['', '', '']
})

df['Pet'] = np.where(
    # 判断String是否为空或空字符串
    df['String'].isna() | df['String'].eq(''),
    '',  # 保持Pet为空
    # 非空时匹配宠物名
    np.where(df['String'].str.contains("cat"), "cat", 
             np.where(df['String'].str.contains("dog"), "dog", ''))
)

方法二:正则提取更简洁高效

直接用str.extract抓取目标关键词,空行自动保留空值,最后转成空字符串即可:

df['Pet'] = df['String'].str.extract(r'(cat|dog)', expand=False).fillna('')

正则表达式(cat|dog)会精准提取String中的宠物名称,没有匹配到的情况(包括空行)会返回NaN,fillna('')将其转为空字符串,完美满足需求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 16:10:29