python - 在 Python 中的 pandas.Series 的列表中查找子字符串
问题描述
我有一个熊猫数据框,其中一列包含列表。我想搜索每个列表(=每一行)并检查一个或多个元素是否包含特定的子字符串。
数据:
list_Series = pd.Series([["handful of tomatos", "2 peppers", " tsp salt"],
["1 kg of meat", "fresh basil"]])
搜索词:
search_for = ["pepper", "salt"]
'list_Series' 的所需输出:
True
False
现在我想应用一个(可能是矢量化的?)函数来检查一个系列元素是否包含所有搜索子字符串。如果系列只包含字符串而没有列表,我会这样做:pd.Series.str.contains("salt")
. 在查看单个列表时,我会执行:
def filterlist(liste, searchwords):
occurs = 0
for word in searchwords:
for string in liste:
if word.lower() in string.lower():
occurs += 1
break
if occurs == len(searchwords):
return True
但这是非常笨重且冗长的。而且我想在应用于整个 pd.Series 时效率不是很高。而且我不知道如何将其应用于系列。
谢谢您的帮助!也在寻找反馈,这是我在 stackoverflow 上的第一篇文章!将这个系列转换为数据框会更好吗?
解决方案
您可以使用嵌套列表推导:
result = [listelement for searchtarget in search_for for each_list_in_series in list_Series for listelement in each_list_in_series if searchtarget in listelement]
result
将会:
['2 peppers', ' tsp salt']
这等效于,没有列表推导:
result=[]
for searchtarget in search_for:
for each_list_in_series in list_Series:
for listelement in each_list_in_series:
if searchtarget in listelement:
result.append(listelement)
推荐阅读
- java - 为什么循环从对象数组中打印相同的东西?
- javascript - 导航菜单列表(子菜单)下拉菜单在 reactjs 中不起作用
- python - 如何使用我自己的语料库文本创建和拟合 vocab.bpe 文件(GPT 和 GPT2 OpenAI 模型)?
- python-3.x - 如何在 Python 中获得每次不同的行数以及每次执行时的值?
- ios - 如何实现奇妙清单 iOS 应用程序中使用的这种类型的视图?
- c++ - 为什么 vector.clear() 在循环中不工作?
- python - 从 .txt 文件中读取特定行
- amazon-ec2 - ejabberdctl start 成功,但 status 和 stop 无法连接到节点
- javascript - 为什么我收到 UnhandledPromiseRejectionWarning: Unhandled Promise RejectionWarning: Unhandled Promise Rejection?
- python - 如何从从 REST API 下载的二进制字符串重新创建图像