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

如何将Pandas含列表的列拆分为多列并处理NaN值?

解决Pandas列拆分时的NaN报错问题

问题原因

你的df['movie-data']列中存在NaN值(float类型),直接用list(df['movie-data'])转换时,NaN没有len()方法,因此触发TypeError。同时原数据每行是包含单个字典的列表,需要先提取字典再拆分列。

解决方案

方法1:分步处理(清晰易懂)

  1. 先处理列中的每个元素,提取字典并兼容NaN值:
def parse_movie_entry(entry):
    # 仅当entry是列表且非空时,取第一个字典;否则返回空字典
    if isinstance(entry, list) and entry:
        return entry[0]
    return {}

# 应用函数得到字典序列
movie_dicts = df['movie-data'].apply(parse_movie_entry)
  1. 使用pd.json_normalize()展开字典为独立列:
split_df = pd.json_normalize(movie_dicts)
# 按需重命名列(比如将'co-stars'改为'costars')
split_df.rename(columns={'co-stars': 'costars'}, inplace=True)

方法2:简化一行写法

如果追求简洁,可合并步骤:

split_df = pd.json_normalize(
    df['movie-data']
    .fillna([{}])  # 将NaN替换为包含空字典的列表
    .apply(lambda x: x[0])  # 提取列表中的字典
).rename(columns={'co-stars': 'costars'})

优势说明

  • pd.json_normalize()是Pandas专门用于解析字典/JSON数据的工具,能自动处理缺失字段,生成对应NaN值,不会因缺少键报错
  • 提前处理NaN值为[{}],避免了提取字典时的索引错误
  • 相比直接转换为DataFrame,该方法更稳定,适配3万行的大数据量

内容的提问来源于stack exchange,提问作者Ofek

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 15:35:24