Pandas处理DataFrame嵌套列None值 将其转换为空字符串
Pandas嵌套结构内None值转空字符串方案
问题根因
fillna() 仅能替换DataFrame顶层被Pandas识别为NaN/None的空值,你的场景中不生效是因为待替换的None存在于单元格存储的Python原生嵌套对象内部:
- 拆分
engagements得到的breakdown列,每个单元格存的是列表,列表内字典的tweets、favorites等字段值为None - 未拆分的
publisher、tvr、categories、keywords列本身存储字典/列表对象,内部也存在None(比如tvr下的v30、er30字段)
这类嵌套在对象内部的None不会被Pandas识别为表层级的空值,因此直接调用fillna无法触达。
实现代码
先通过递归函数遍历所有层级的嵌套结构替换None,再处理顶层残留空值即可:
import pandas as pd def replace_none(obj): # 递归替换字典、列表嵌套结构内的所有None为空字符串 if obj is None: return "" if isinstance(obj, dict): return {k: replace_none(v) for k, v in obj.items()} if isinstance(obj, list): return [replace_none(item) for item in obj] return obj # 遍历所有列,仅对存储对象类型的列做嵌套值替换 for col in video_items_df.columns: if video_items_df[col].dtype == "object": video_items_df[col] = video_items_df[col].apply(replace_none) # 最后处理顶层空值 video_items_df.fillna("", inplace=True)
效果说明
处理完成后,所有层级的None都会被替换为空字符串:
breakdown列内列表字典中的tweets、favorites等字段的None会转为""tvr列内字典的v30、er30等字段的None会转为""- 其余嵌套列、顶层空值也会被统一处理
如果后续需要拆分剩余的嵌套列为普通单列,建议先执行上述替换,避免拆分后生成大量顶层空值增加重复操作。
内容的提问来源于stack exchange,提问作者KristiLuna
相关产品推荐
相关产品推荐

