如何从字典键值对填充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] = "Запрос направлен"
问题分析与修正
- 逻辑错误:
[j] in mras_dict.items()逻辑完全错误,items()返回的是(键, 值)形式的元组,要获取键j对应的值直接用mras_dict[j]即可。 - Pandas赋值问题:用
df['Oleg'][n]这种链式索引容易触发SettingWithCopyWarning,甚至导致赋值不生效,改用df.loc[n, '列名']是更安全的方式。 - 循环冗余:原代码四层嵌套循环完全没必要,简化后逻辑更清晰。
修正后的代码如下:
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
相关产品推荐
相关产品推荐

