如何对Pandas数据框列中字符串按两种规则筛选保留元素?
Pandas数据框两种处理方案
原始数据定义
import pandas as pd df = pd.DataFrame({'Temp' : ['ko1234', 'ko1234|ko445|ko568', 'map123', 'ko895', 'map123|ko889|ko665', 'ko635|map789|map777', 'ko985']})
需求1:仅保留以ko开头的词汇,无符合项则留空
直接通过字符串拆分、筛选、合并完成:
df['Temp_ko_filtered'] = df['Temp'].str.split('|').apply( lambda x: '|'.join([item for item in x if item.startswith('ko')]) )
执行后Temp_ko_filtered列的结果:
ko1234 ko1234|ko445|ko568 ko895 ko889|ko665 ko635 ko985
逻辑说明:按|拆分每个单元格内容为列表,筛选出以ko开头的元素,再用|拼接回字符串;无符合项时拼接结果为空字符串。
需求2:单个词汇保留,多词汇仅保留第二个
有两种高效实现方式:
方式一:Lambda判断列表长度
df['Temp_second'] = df['Temp'].str.split('|').apply( lambda x: x[1] if len(x) >= 2 else x[0] )
方式二:Pandas字符串方法链(更简洁)
df['Temp_second'] = df['Temp'].str.split('|').str.get(1).fillna(df['Temp'])
执行后Temp_second列的结果:
ko1234 ko445 map123 ko895 ko889 map789 ko985
逻辑说明:
- 方式一:拆分后判断列表长度,长度≥2则取第二个元素(索引1),否则取第一个元素(索引0);
- 方式二:拆分后用
str.get(1)提取第二个元素,无第二个元素时返回NaN,再用原列值填充NaN,实现单个词汇保留的效果。
内容的提问来源于stack exchange,提问作者Mario
相关产品推荐
相关产品推荐

