DataFrame列含逗号时如何转换为指定键值结构的字典
实现方案
你已经完成了DocFreq > 5的条件筛选,后续只需要处理DocID字段拆分、按指定键值对构造字典即可,不需要使用默认参数的to_dict()方法,两种可直接运行的方案如下:
方案1:字典推导式实现(性能最优,推荐)
先精简筛选结果,只保留需要的Term和DocID字段,再逐行拆分DocID构造字典:# 筛选符合条件的记录,仅保留需要的两个字段 df_filtered = df[df['DocFreq'] > 5][['Term', 'DocID']] # 构造目标格式字典 result = { term: doc_str.split(',') for term, doc_str in zip(df_filtered['Term'], df_filtered['DocID']) }注意:如果你的DocID字段逗号前后存在多余空格,可以把拆分逻辑替换为
[doc.strip() for doc in doc_str.split(',')],避免生成的文档ID携带无效空格。方案2:Pandas原生方法实现
先把DocID列的字符串提前拆分为列表,再转换为键值对字典:df_filtered = df[df['DocFreq'] > 5][['Term', 'DocID']] # 将DocID列的逗号分隔字符串拆分为列表 df_filtered['DocID'] = df_filtered['DocID'].str.split(',') # 构造以Term为键、DocID列表为值的字典 result = dict(zip(df_filtered['Term'], df_filtered['DocID']))
你之前直接调用df.to_dict()得到嵌套字典的原因是:该方法默认的orient参数为dict,会生成{列名: {行索引: 值}}的双层嵌套结构,自然不符合单键值对的需求。
两种方案最终输出的结构完全匹配你给出的示例格式,比如Term为Want to be with、DocID为doc100.txt,doc8311.txt,doc123.txt的记录,会被处理为"Want to be with": ["doc100.txt", "doc8311.txt", "doc123.txt"]的键值对。
内容的提问来源于stack exchange,提问作者Kiera.K
相关产品推荐
相关产品推荐

