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

如何从含不同列名的行构造包含缺失列的DataFrame?

构造含缺失列的DataFrame方案

针对你提供的原始数据,这里给出两种可行的实现方法:

方法一:按你的预处理思路实现

步骤1:预处理数据

先将原始字典格式转换为包含year键值对的字典列表:

data = {
    2012: [('A', 9), ('C', 7), ('D', 4)],
    2013: [('B', 7), ('C', 6), ('E', 1)]
}

processed_data = []
for year, items in data.items():
    # 将年份转为('year', 年份)的元组,再和原有数据合并后转成字典
    row_dict = dict([('year', year)] + items)
    processed_data.append(row_dict)

此时processed_data的结构为:

[{'year': 2012, 'A': 9, 'C': 7, 'D': 4}, {'year': 2013, 'B': 7, 'C': 6, 'E': 1}]

步骤2:生成DataFrame并填充缺失值

用pandas将字典列表转为DataFrame,再把缺失值填充为0,最后调整列顺序:

import pandas as pd

# 生成DataFrame
df = pd.DataFrame(processed_data)
# 缺失值填充为0,并转为整数类型
df = df.fillna(0).astype(int)
# 调整列顺序,让year列排在最前面
cols = ['year'] + sorted(col for col in df.columns if col != 'year')
df = df[cols]

方法二:直接构造完整行数据

无需预处理成指定列表,直接遍历年份构造包含所有列的行数据:

import pandas as pd

data = {
    2012: [('A', 9), ('C', 7), ('D', 4)],
    2013: [('B', 7), ('C', 6), ('E', 1)]
}

# 获取所有可能的列名(除year外)
all_cols = set()
for items in data.values():
    all_cols.update(col for col, _ in items)
all_cols = sorted(all_cols)

# 构造每一行的完整数据
rows = []
for year, items in data.items():
    row = {'year': year}
    # 先初始化所有列为0
    for col in all_cols:
        row[col] = 0
    # 填充已有数据
    for col, val in items:
        row[col] = val
    rows.append(row)

# 生成DataFrame
df = pd.DataFrame(rows)

最终输出结果

两种方法运行后都会得到目标DataFrame:

year  A  B  C  D  E
0  2012  9  0  7  4  0
1  2013  0  7  6  0  1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 00:10:51