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

如何拆分电影营收预测数据集中含字典/列表的列至独立列?

解决方法:拆分包含字典/字典列表的列到独立字段

我来帮你搞定这个拆分问题,你的核心需求是把混合了单个字典和字典列表的列,提取出指定键的值,多个值用逗号拼接,缺失值用NaN填充。下面是完整的实现步骤:

1. 准备示例数据

首先先还原你的示例DataFrame:

import pandas as pd
import numpy as np

df = pd.DataFrame(
    {'a':[1,2,3], 
     'b':[{'c':1}, [{'c':4},{'d':3}], [{'c':5, 'd':6},{'c':7, 'd':8}]]}
)

2. 统一列数据格式

因为b列里既有单个字典,又有字典列表,我们先把所有元素统一转为列表格式,这样后续处理逻辑可以保持一致:

# 将单个字典转为包含该字典的列表,列表则保持原样
df['b'] = df['b'].apply(lambda x: [x] if isinstance(x, dict) else x)

3. 定义提取函数

接下来写一个函数,专门处理每个字典列表,提取c和d的值,多个值用逗号拼接,没有对应值则返回NaN:

def extract_key_values(row):
    # 收集所有字典中存在的c值,过滤掉None
    c_values = [d.get('c') for d in row if d.get('c') is not None]
    # 收集所有字典中存在的d值,过滤掉None
    d_values = [d.get('d') for d in row if d.get('d') is not None]
    
    # 处理值的拼接:有值就用逗号连接,无值则返回NaN
    c_result = ','.join(map(str, c_values)) if c_values else np.nan
    d_result = ','.join(map(str, d_values)) if d_values else np.nan
    
    # 返回Series,对应c和d列
    return pd.Series([c_result, d_result], index=['c', 'd'])

4. 应用函数并合并结果

把函数应用到b列,然后和原DataFrame的a列合并,最后调整列顺序:

# 提取c、d列并和原a列合并
result_df = df['b'].apply(extract_key_values).join(df['a'])
# 调整列顺序,让a列排在最前面
result_df = result_df[['a', 'c', 'd']]

最终结果

运行后你会得到完全符合预期的输出:

a    c    d
0  1    1  NaN
1  2    4    3
2  3  5,7  6,8

关键细节说明

  • 用isinstance(x, dict)判断元素类型,确保单个字典被转为列表,统一处理逻辑
  • 用dict.get(key)而不是直接dict[key],避免出现KeyError(因为有的字典没有c或d键)
  • 用map(str, ...)把数值转为字符串,才能用逗号拼接多个值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:03:31