You need to enable JavaScript to run this app. 如何从存储逗号分隔多城市名的DataFrame列中提取唯一城市列表
优惠活动
大模型
产品
解决方案
定价
更多

如何从存储逗号分隔多城市名的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.26 14:45:04