如何从存储逗号分隔多城市名的DataFrame列中提取唯一城市列表
逗号分隔城市列去重实现方案
核心思路
之前直接使用unique()、尝试用CountVectorizer达不到预期,本质是没有先把整行拼接的逗号字符串拆成单个独立城市,直接对整段字符串做去重。正确的处理链路是:拆分拼接字符串 → 展开为一维城市序列 → 对单个城市去重 → 按要求格式拼接结果。
可直接运行的完整代码
import pandas as pd # 构造和示例完全匹配的测试DataFrame df = pd.DataFrame({ 'city': [ 'Dallas,Columbus,Portland,LasVegas', 'Columbus,Dallas,LasVegas', 'Dallas', 'Portland,Columbus,LosAngeles', 'Columbus' ] }) # 1. 按逗号拆分每一行的城市内容,将列表形式的结果展开为一维序列 # 执行完这步后,all_cities是包含所有出现过的单个城市的列,每个元素都是独立城市名 all_cities = df['city'].str.split(',').explode() # 2. 对独立城市去重:pandas的unique()会按城市首次出现的顺序返回,和示例要求的顺序完全匹配 unique_cities = all_cities.unique() # 3. 用逗号拼接为最终需要的字符串格式 result = ','.join(unique_cities) print(result)
代码运行输出结果为:Dallas,Columbus,Portland,LasVegas,LosAngeles,和预期完全一致。
常见踩坑说明
- 为什么直接对原city列调用
df['city'].unique()拿不到正确结果:原列每个元素是整段逗号拼接的长字符串,不是单个城市,直接去重只会过滤完全一样的整行字符串,根本不会拆分内部的城市内容。 - 为什么不推荐用CountVectorizer实现:该函数是为文本场景的词频、特征统计设计的,用来处理这种固定格式的逗号分隔列表,需要额外配置分词规则、特征过滤逻辑,链路冗余度高,可读性差,远不如直接字符串拆分的方案高效。
- 顺序注意点:如果用Python原生
set做去重,返回的城市顺序是随机打乱的,无法匹配按首次出现顺序排列的要求,优先用pandas内置的unique()方法即可。 - 兼容性说明:
str.split()配合explode()的实现从pandas 0.25版本开始原生支持,当前常用的pandas版本均可直接运行,无额外依赖。
内容的提问来源于stack exchange,提问作者johnnn123
相关产品推荐
相关产品推荐

