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

如何将值为不定长列表的字典列表转换为Pandas DataFrame?

解决方案

步骤概述

要实现将字典列表转换为符合要求的Pandas DataFrame,需完成三个核心步骤:

  • 遍历所有字典,统计每个键对应列表的全局最大长度
  • 将每个字典的列表扩展到对应键的最大长度,拆分为键_序号形式的键值对
  • 把处理后的字典列表转换为DataFrame

完整代码实现

import pandas as pd

# 示例输入数据
data = [
    {'MOS_LN': ['1e-07', '1e-07', 0, 0], 'MOS_WD': ['1.5', '1.5', 0, 0], 'R_Val': [0, 0, 10000.0, 0], 'C_Val': [0, 0, 0, 7e-06], 'L_Val': [0, 0, 0, 0], 'Features': [6, 2, 3, 1, 0, 1, 1, 2, 0.0, 0, 0.002, 0.003, 0.003, 0.003, 0.004]},
    {'MOS_LN': [0, 0], 'MOS_WD': [0, 0], 'L_Val': [0.003, 0], 'C_Val': [0, 4.9999999999999996e-06], 'R_Val': [0, 0], 'Features': [3, 1, 1, 1, 1, 0, 0, 1, 10.0, 50.0, 9.081, 6.35, -5.586, -9.658, -0.042]}
]

# 1. 统计每个键的全局最大列表长度
max_lengths = {}
for item in data:
    for key, lst in item.items():
        current_len = len(lst)
        if key not in max_lengths or current_len > max_lengths[key]:
            max_lengths[key] = current_len

# 2. 处理每个字典,拆分出带序号的列
processed_data = []
for item in data:
    processed_item = {}
    for key, lst in item.items():
        target_len = max_lengths[key]
        # 扩展列表,不足部分补NaN(Pandas原生缺失值类型)
        extended_list = lst + [pd.NA] * (target_len - len(lst))
        # 生成带序号的列名和对应值
        for idx in range(target_len):
            col_name = f"{key}_{idx + 1}"
            processed_item[col_name] = extended_list[idx]
    processed_data.append(processed_item)

# 3. 转换为DataFrame
df = pd.DataFrame(processed_data)
print(df)

代码说明

  • 统计最大长度:必须遍历所有字典才能获取全局最大长度,你之前的代码仅统计单个字典的长度,会导致短列表的字典无法被完整映射。
  • 扩展并拆分列表:用pd.NA填充缺失值(避免和有效数据0混淆),如果业务需要用0填充,直接替换pd.NA即可。拆分后每个元素对应键_序号的列名,符合需求格式。
  • 转换DataFrame:Pandas会自动将处理后的字典列表转换为规范的表格结构,无需额外调整。

内容的提问来源于stack exchange,提问作者Dipali Joshi-Jain.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 20:47:50