You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 15:00:53