DataFrame去重子串后unique_type列格式修正需求
去除DataFrame列中重复子串并生成无格式符号的字符串列
你的问题出在直接将集合对象赋值给了新列,Pandas会直接显示集合的字符串表示(带大括号和引号)。需要把去重后的结果转换成逗号分隔的普通字符串,同时处理空值和子串前后空格的问题,以下是可行方案:
解决代码
import pandas as pd # 示例DataFrame df_1 = pd.DataFrame({ 'product_type': ['bag,bag', 'tote bag,bag', '', 'handbag,handbag'] }) def process_unique_types(s): # 处理空值或空字符串 if pd.isna(s) or s.strip() == '': return '' # 拆分字符串、去除每个子串的前后空格、过滤空内容 parts = [part.strip() for part in s.split(',') if part.strip()] # 去重(若需保留原顺序,改用list(dict.fromkeys(parts))) unique_parts = list(set(parts)) # 用逗号加空格拼接成字符串 return ', '.join(unique_parts) # 生成新列 df_1['unique_type'] = df_1['product_type'].apply(process_unique_types)
结果验证
执行后得到的DataFrame如下:
product_type unique_type 0 bag,bag bag 1 tote bag,bag tote bag, bag 2 3 handbag,handbag handbag
关键说明
- 处理空值/空字符串:避免生成
{''}这类无效结果,直接返回空字符串 - 子串去空格:解决
tote bag, bag中拆分后子串带空格的问题,保证去重准确 - 集合转字符串:用
join方法将去重后的列表转换成逗号分隔的普通字符串,替代集合的默认格式 - 顺序保留可选:如果需要保持子串原来的出现顺序,把
list(set(parts))替换为list(dict.fromkeys(parts)),因为集合会打乱元素顺序
内容的提问来源于stack exchange,提问作者Marius
相关产品推荐
相关产品推荐

