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

如何从Pandas DataFrame中提取指定值生成目标字典?

解决方案

根据你的需求,这里分两种常见场景给出完整代码:

场景1:所有行的信息合并到同一个字典(重复键会被后续行覆盖)

import pandas as pd

# 初始化你的DataFrame
df = pd.DataFrame({
    'col_1': [4.0, 4.0, 49.2],
    'sum': [45.0, None, 10.8],
    'value_3': [None, None, 3.4],
    'value_5': [0.9, 4.5, None],
    'value_7': [9.3, None, None]
})

sum_dict = {}
for idx, row in df.iterrows():
    # 添加col_1与sum的键值对
    sum_dict[row['col_1']] = row['sum']
    
    # 处理指定的value列
    target_cols = ['value_3', 'value_5', 'value_7']
    for col in target_cols:
        cell_value = row[col]
        # 跳过NaN值
        if not pd.isna(cell_value):
            # 提取列名中的数字作为键
            key = int(col.split('_')[1])
            sum_dict[key] = cell_value

执行后sum_dict的最终结果:

{4.0: None, 5: 4.5, 7: 9.3, 49.2: 10.8, 3: 3.4}

场景2:每行生成独立字典并收集到列表中(保留所有行的独立数据)

如果需要保留每行的独立字典,避免键覆盖,可以用列表存储:

import pandas as pd

df = pd.DataFrame({
    'col_1': [4.0, 4.0, 49.2],
    'sum': [45.0, None, 10.8],
    'value_3': [None, None, 3.4],
    'value_5': [0.9, 4.5, None],
    'value_7': [9.3, None, None]
})

sum_dicts = []
for idx, row in df.iterrows():
    row_dict = {}
    row_dict[row['col_1']] = row['sum']
    
    target_cols = ['value_3', 'value_5', 'value_7']
    for col in target_cols:
        cell_value = row[col]
        if not pd.isna(cell_value):
            key = int(col.split('_')[1])
            row_dict[key] = cell_value
    sum_dicts.append(row_dict)

执行后sum_dicts的结果:

[
    {4.0: 45.0, 5: 0.9, 7: 9.3},
    {4.0: None, 5: 4.5},
    {49.2: 10.8, 3: 3.4}
]

关键逻辑说明

  • 字典初始化位置:场景1放在循环外避免数据清空,场景2放在循环内生成每行独立字典。
  • 用pd.isna()准确判断单元格是否为NaN值。
  • 通过col.split('_')[1]提取列名中的数字部分,转成整数作为新键。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 09:00:51