Pandas如何仅将指定列中的嵌套列表(列表的列表)展平为一维列表
报错原因
你使用sum(x, [])触发报错的核心原因是:当col2中的元素为普通单层列表时,列表内的元素是整数/字符串等非列表类型,sum方法会尝试将非列表元素与空列表做拼接运算,自然触发TypeError类型错误。
解决方案
方案1:高可读性自定义函数(适配你的场景)
仅当列表为全嵌套结构(列表内所有元素都是列表)时触发展平,普通列表保持原样:
def flatten_if_nested(x): # 先判断列表非空,再判断首个元素为列表,符合你的数据特征 if x and isinstance(x[0], list): return [item for sublist in x for item in sublist] return x DF['col2'] = DF['col2'].apply(flatten_if_nested)
方案2:一行简洁写法
和方案1逻辑一致,用lambda表达式简化书写:
DF['col2'] = DF['col2'].apply(lambda x: [i for j in x for i in j] if (x and isinstance(x[0], list)) else x)
方案3:兼容混合结构的通用方案
如果你的数据中可能存在「同一个列表内同时包含普通元素和嵌套列表」的混合场景,可以用下面的通用展平函数:
def flatten_mixed(x): result = [] for element in x: if isinstance(element, list): result.extend(element) else: result.append(element) return result DF['col2'] = DF['col2'].apply(flatten_mixed)
内容的提问来源于stack exchange,提问作者Soumya Ranjan Sahoo
相关产品推荐
相关产品推荐

