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

如何在Pandas DataFrame行内列表中筛选含指定字符串的元素

解决Pandas DataFrame提取列表内指定字符串元素的问题

我来帮你搞定这个需求!你现在能筛选出包含目标字符串的行,但sentence_split列返回的是完整列表,想要只保留列表里含指定字符串的元素,对吧?咱们直接对列表里的每个元素做筛选就行,看下面的具体实现:

完整代码实现

import pandas as pd
import numpy as np

l1 = [1,2,3,4,5,6]
l2 = ['hello world \n my world','world is a great place \n we live in it','planet earth',np.NaN,'\n save the water','']
df = pd.DataFrame(list(zip(l1,l2)), columns=['id','sentence'])

# 分割句子,同时处理NaN值(转成空列表避免报错)
df['sentence_split'] = df['sentence'].str.split('\n').fillna([[]])

# 核心步骤:筛选每个列表中含'world'的元素,再用分号拼接成字符串
df['sentence_split'] = df['sentence_split'].apply(
    lambda x: '; '.join([item.strip() for item in x if 'world' in item.strip()])
)

# 只保留有有效结果的行
result_df = df[df['sentence_split'] != ''].reset_index(drop=True)

print(result_df)

代码关键点解释

  • 处理空值:用fillna([[]])把NaN转换成空列表,避免后续遍历列表时出现报错
  • 元素级筛选:通过lambda函数遍历每个列表里的元素,先strip()去掉前后空白(解决分割后元素带空格的问题),再判断是否包含目标字符串'world',符合条件的才保留
  • 拼接结果:用'; '把筛选后的元素拼接成字符串,如果你喜欢其他分隔符,直接改成' | '或者', '就行

执行结果

运行上面的代码后,会得到你想要的结果:

id                                           sentence               sentence_split
0   1                          hello world \n my world        hello world; my world
1   2  world is a great place \n we live in it        world is a great place

可选:保留列表格式

如果你不想把结果拼成字符串,而是要保留列表形式,只需要去掉join部分:

df['sentence_split'] = df['sentence_split'].apply(
    lambda x: [item.strip() for item in x if 'world' in item.strip()]
)

这样sentence_split列就会是只包含目标元素的列表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:53:26