如何从pandas字符串列表格式列提取元素并获得去重结果
解决方案
方案1:基于你现有处理逻辑调整
你现有的处理得到的c2列是逗号分隔的字符串,只需要在转列表后将每个字符串按逗号拆分、展平,再去重即可:
import re import pandas as pd # 你原有代码逻辑 df = pd.DataFrame({"c1":["[\"text\",\"text2\"]","[\"bla\",\"bla\",\"bla\"]"]}) df["c2"] = df["c1"].apply(lambda x:re.sub('[\["\]]', "", x)) # 拆分展平所有元素 all_items = [item for s in df["c2"] for item in s.split(",")] # 去重得到结果 unique_res = list(set(all_items))
注意:你原有代码中使用
list作为变量名会覆盖Python内置的list类型,建议更换为其他自定义变量名避免后续报错。
如果需要保留元素首次出现的顺序,可以用下面的方式代替set去重:
unique_res = list(dict.fromkeys(all_items))
方案2:更稳妥的JSON解析方案(推荐)
你c1列的原始值本身就是合法的JSON数组字符串,无需用正则处理,直接解析JSON可以避免元素本身包含逗号、引号时的处理错误:
import json import pandas as pd df = pd.DataFrame({"c1":["[\"text\",\"text2\"]","[\"bla\",\"bla\",\"bla\"]"]}) # 直接解析为Python列表,无需正则替换 df["c2"] = df["c1"].apply(json.loads) # 展平嵌套列表 all_items = [item for sublist in df["c2"] for item in sublist] # 去重 unique_res = list(set(all_items))
如果遇到不标准的JSON格式,也可以改用ast.literal_eval完成解析:
import ast df["c2"] = df["c1"].apply(ast.literal_eval)
内容的提问来源于stack exchange,提问作者Katty_one
相关产品推荐
相关产品推荐

