如何在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
相关产品推荐
相关产品推荐

