Pandas通用合并同名列方法:重复值以空格分隔拼接
嵌套地址字段同名列合并通用方案
问题背景
从API拿到的三层嵌套地址字段原始数据如下,转成表结构时会出现同名字段多列的问题,比如示例中city字段重复出现2次,对应两个不同的值:
raw_list = [[[['3200', 'house_number'],['northline ave', 'road'],['ste 360', 'unit'],['greensboro', 'city'],['27408', 'postcode'],['7611', 'city'],['nc', 'state'],['us', 'country']]]]
需要实现无前置字段配置的通用处理逻辑:无论哪个字段重复、重复多少次,都将同名字段对应的多个值以空格为分隔符拼接,最终每个字段保留唯一一列。
实现思路
- 先递归打平任意层级的嵌套列表,提取所有
[字段值, 字段名]格式的二元组,适配API返回可能存在的多层嵌套结构 - 用字典做字段聚合,以字段名为键,遍历所有二元组时把同名字段的值追加到对应键的列表中
- 遍历聚合字典,把每个字段对应的多个值用空格拼接为单个字符串,最终输出的字典可直接转换为表结构,不存在重复列
代码实现(Python)
from collections import defaultdict def extract_field_pairs(nested_data): """递归打平嵌套列表,提取所有[值, 字段名]二元组""" pairs = [] for item in nested_data: if isinstance(item, list): # 匹配值-字段名的基础结构 if len(item) == 2 and isinstance(item[1], str): pairs.append(item) else: pairs.extend(extract_field_pairs(item)) return pairs def merge_duplicate_fields(raw_data): """合并同名字段,值用空格拼接""" field_collector = defaultdict(list) for value, field_name in extract_field_pairs(raw_data): field_collector[field_name].append(value) # 拼接同名字段值 return {field: " ".join(value_list) for field, value_list in field_collector.items()} # 测试示例数据 if __name__ == "__main__": raw_list = [[[['3200', 'house_number'],['northline ave', 'road'],['ste 360', 'unit'],['greensboro', 'city'],['27408', 'postcode'],['7611', 'city'],['nc', 'state'],['us', 'country']]]] result = merge_duplicate_fields(raw_list) print(result)
运行结果
{ 'house_number': '3200', 'road': 'northline ave', 'unit': 'ste 360', 'city': 'greensboro 7611', 'postcode': '27408', 'state': 'nc', 'country': 'us' }
该逻辑不需要提前指定任何字段名,对嵌套层级、字段重复次数没有限制,输出结果可以直接传入pandas等库转成结构化表,不会出现同名列冲突。
内容的提问来源于stack exchange,提问作者kiran u
相关产品推荐
相关产品推荐

