将DataFrame末尾行追加到字典嵌套的DataFrame时出现KeyError如何解决
问题原因
- 直接抛出
KeyError: 1的核心原因是你初始化的d1是空字典,不存在键为1、2等的对应值(也就是你提到的存储的多份DataFrame),直接访问d1[i]自然会触发键不存在的报错。 - 即使你提前给
d1填充了DataFrame,现有写法也达不到追加效果:pandas的append方法是非原地修改的方法,执行后会返回新的DataFrame,不会修改原对象,必须赋值接收返回值才会生效。另外pandas 1.4及以上版本已经正式弃用append方法,更推荐用pd.concat做数据追加。
解决方案
首先要保证操作前d1已经填充了你需要修改的所有DataFrame,再执行追加逻辑,参考代码如下:
import pandas as pd # 先构造存储多份DataFrame的d1,此处为示例初始值,你可以替换成自己的实际数据 d1 = { 1: pd.DataFrame({"A": ["A1_test"], "B": ["B1_test"], "C": ["C1_test"], "D": ["D1_test"]}), 2: pd.DataFrame({"A": ["A2_test"], "B": ["B2_test"], "C": ["C2_test"], "D": ["D2_test"]}), 3: pd.DataFrame({"A": ["A3_test"], "B": ["B3_test"], "C": ["C3_test"], "D": ["D3_test"]}), } df1 = pd.DataFrame( { "A": ["A0", "A1", "A2", "A3"], "B": ["B0", "B1", "B2", "B3"], "C": ["C0", "C1", "C2", "C3"], "D": ["D0", "D1", "D2", "D3"], }, index=[0, 1, 2, 3] ) # 提前取出df1最后一行,避免循环中重复计算 last_row = df1.tail(1) # 遍历d1所有元素,完成追加 for key, df in d1.items(): # ignore_index参数可以根据你是否需要重置索引的需求调整 d1[key] = pd.concat([df, last_row], ignore_index=True) print(f"d1[{key}] 内容:") print(d1[key]) print("-"*20)
内容的提问来源于stack exchange,提问作者ANen
相关产品推荐
相关产品推荐

