如何将Pandas含列表的列拆分为多列并处理NaN值?
解决Pandas列拆分时的NaN报错问题
问题原因
你的df['movie-data']列中存在NaN值(float类型),直接用list(df['movie-data'])转换时,NaN没有len()方法,因此触发TypeError。同时原数据每行是包含单个字典的列表,需要先提取字典再拆分列。
解决方案
方法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)
- 使用
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
相关产品推荐
相关产品推荐

