如何根据Pandas DataFrame的String列填充Pet列并保留空行
问题描述
我有如下Pandas DataFrame:
| ID | String | Pet |
|---|---|---|
| 1 | this is a cat | |
| 2 | hello 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
相关产品推荐
相关产品推荐

