如何解决pandas处理列数组去重时的malformed node or string报错
问题解决
报错根因
你遇到的报错本质是两个原因:
- Column2中存在NaN空值,
ast.literal_eval()仅支持解析合法的Python字面量字符串,无法处理空值,传入NaN就会触发malformed node or string报错 - 若Column2中部分行的值本身已经是列表类型而非字符串格式的列表,传入
ast.literal_eval()也会触发解析错误
修复后代码
import pandas as pd import ast def ddpe(a): # 空值直接返回不处理 if pd.isna(a): return a # 已经是列表的直接去重,无需解析 if isinstance(a, list): return list(dict.fromkeys(a)) # 字符串格式的列表先解析再去重,加异常捕获兼容格式异常的行 try: parse_list = ast.literal_eval(a) return list(dict.fromkeys(parse_list)) except: return a df['Column3'] = df['Column2'].apply(ddpe)
改动说明
- 新增空值判断,符合你预期里NaN行直接返回NaN的需求
- 兼容了Column2值为列表/字符串列表两种存储格式
- 新增异常捕获逻辑,避免个别行格式异常导致整个apply操作中断
内容的提问来源于stack exchange,提问作者Cuckoo
相关产品推荐
相关产品推荐

