DataFrame列清洗:含指定关键词却返回np.nan的函数修正
问题修正方案
问题原因
你传入的string是一个列表(比如string_samp是包含单个字符串的列表),但函数里直接执行keyword in string——这是在判断关键词是否是列表的元素,而非判断关键词是否存在于列表内的字符串中,因此条件不成立,返回了np.nan。
修正后的函数
import numpy as np def find_and_suck_hashtag_vacuum(string, keyword, output): # 处理单个字符串的情况 if isinstance(string, str): return output if keyword in string else np.nan # 处理列表/可迭代对象(如DataFrame列的批量元素) elif hasattr(string, '__iter__') and not isinstance(string, str): return [output if keyword in s else np.nan for s in string] # 其他无效输入返回nan else: return np.nan
测试验证
运行你的测试代码:
string_samp = ['Air conditioning,Car park,Interesting wine list,Restaurant offering vegetarian menus,Wheelchair access'] output = find_and_suck_hashtag_vacuum(string_samp, "Air", "AC") print(output) # 输出: ['AC']
针对DataFrame列的更优写法
如果是清洗DataFrame的description列,推荐直接用Pandas的矢量化操作,比自定义函数更高效:
import pandas as pd import numpy as np # 示例DataFrame df = pd.DataFrame({ 'description': [ 'Air conditioning,Car park', 'Wheelchair access', 'Interesting wine list,Air conditioning' ] }) # 生成新列,匹配到关键词返回"AC",否则返回np.nan df['ac_tag'] = np.where(df['description'].str.contains("Air"), "AC", np.nan)
内容的提问来源于stack exchange,提问作者anon
相关产品推荐
相关产品推荐

