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

如何从字典键值对填充DataFrame?代码报错求助

字典键值对填充DataFrame的修正方案

原始代码与问题

你初始化列表、字典和DataFrame的代码如下:

n = 1
mras = '2'+str(n)+'_'+str(day)+str(month)+str(year[-2:])
hanim='1'+str(n)+'_'+str(day)+str(month)+str(year[-2:])
mras_list = []
hanim_list = []
mras_list.append(mras)
hanim_list.append(hanim)
mras_dict =  { fruit : "" for fruit in mras_list }
keys = list(mras_dict.keys())

hanim_dict =  { fruit : "" for fruit in hanim_list }
hanim_keys = list(hanim_dict.keys())

import pandas as pd
df = pd.DataFrame(columns =['Elena', 'Состояние', 'Oleg', 'Состоянie'] )
df = df.reindex(df.index.tolist() + list(range(1, 40)))

你尝试用以下代码填充DataFrame,但df['Oleg'][n], df['Состоянie'][n] = j, [j] in mras_dict.items()语句存在错误,需要实现将字典的键和值分别填入对应列:

for h in emails: 
    for u in mras_list:
        for j in mras_dict:
            for p in hanim_dict:
                if h in mras_list: 
                    mras_dict[u] = "Запрос направлен"
                    df['Oleg'][n], df['Состоянie'][n] = j, [j] in mras_dict.items()
                if h in hanim_dict:
                    hanim_dict[p] = "Запрос направлен"

问题分析与修正

  1. 逻辑错误:[j] in mras_dict.items() 逻辑完全错误,items()返回的是(键, 值)形式的元组,要获取键j对应的值直接用mras_dict[j]即可。
  2. Pandas赋值问题:用df['Oleg'][n]这种链式索引容易触发SettingWithCopyWarning,甚至导致赋值不生效,改用df.loc[n, '列名']是更安全的方式。
  3. 循环冗余:原代码四层嵌套循环完全没必要,简化后逻辑更清晰。

修正后的代码如下:

for h in emails: 
    # 处理mras相关的键值对,填充Oleg和Состоянie列
    if h in mras_list:
        # 更新字典所有键的值
        for key in mras_dict:
            mras_dict[key] = "Запрос направлен"
        # 遍历字典键值对,填入DataFrame的第n行
        for key, value in mras_dict.items():
            df.loc[n, 'Oleg'] = key
            df.loc[n, 'Состоянie'] = value
            # 如果需要多行填充,每次写完后自增行号
            n += 1
    
    # 处理hanim相关的键值对,填充Elena和Состояние列
    if h in hanim_list:
        # 更新字典所有键的值
        for key in hanim_dict:
            hanim_dict[key] = "Запрос направлен"
        # 遍历字典键值对,填入DataFrame的第n行
        for key, value in hanim_dict.items():
            df.loc[n, 'Elena'] = key
            df.loc[n, 'Состояние'] = value
            # 需多行填充则自增行号
            n += 1

补充说明

  • 如果每个字典只有一个键值对(像你初始化的那样),可以去掉内层遍历,直接取字典的键和值:key, value = next(iter(mras_dict.items())),再填入DataFrame。
  • 若要批量填充所有字典的键值对,直接遍历字典的items()方法即可,无需额外遍历列表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 04:32:46