如何在字典的DataFrame中循环追加行,扩展数据规模?
解决循环中追加DataFrame列行的问题
核心问题分析
你当前的代码用=直接赋值,每次迭代都会覆盖原有列数据,而非追加。另外append/concat未生效是因为你没将操作结果重新赋值回原DataFrame——pandas这类操作默认返回新对象,不会原地修改数据。
分步解决方案
1. 初始化字典与空DataFrame
预先创建包含两个目标DataFrame的字典,定义好所有需要的列:
import pandas as pd # 初始化字典,包含两个结构完整的空DataFrame dff_dict = { 'expert_2021': pd.DataFrame(columns=['Price_REG1', 'Price_REG2', 'Price_REG3', 'Price_REG4']), 'expert_2022': pd.DataFrame(columns=['Price_REG1', 'Price_REG2', 'Price_REG3', 'Price_REG4']) }
2. 简化逻辑并实现追加
用映射关系替代冗余的if-elif,同时正确执行追加并赋值:
# 年份与字典键的映射 year_to_key = {17544: 'expert_2021', 26304: 'expert_2022'} # s值与列名的映射 s_to_col = {1: 'Price_REG1', 2: 'Price_REG2', 3: 'Price_REG3', 4: 'Price_REG4'} for i in year: for j in days: for s in range(1, 5): df_key = year_to_key.get(i) col_name = s_to_col.get(s) if not (df_key and col_name): continue # 跳过不匹配的情况 # 获取当前列数据,合并新的24行数据 # 假设c是单列DataFrame,直接提取其值序列 updated_column = pd.concat([ dff_dict[df_key][col_name], c.iloc[:, 0] # 取c的第一列数据(确保是对应列的值) ], ignore_index=True) # 将合并后的列重新赋值回DataFrame dff_dict[df_key][col_name] = updated_column
3. 关键注意点
- 若
c的列名已和目标列一致(比如处理s=1时c的列名就是Price_REG1),可直接用c[col_name]替代c.iloc[:,0] ignore_index=True会重置合并后的索引,避免重复索引问题- 第一次迭代时原列是空的,
concat会直接将c的数据作为初始行,后续迭代持续追加
验证结果
每次循环后,可通过print(dff_dict['expert_2021'].shape)查看形状变化,会从(0,4)逐步变为(24,4)、(48,4)等,最终得到你需要的多列多行DataFrame。
内容的提问来源于stack exchange,提问作者user20050294
相关产品推荐
相关产品推荐

