如何将for循环生成的numpy数组动态存入pandas DataFrame的对应列
错误原因
- 逻辑嵌套错误:你将DataFrame初始化、全列赋值的逻辑放在了遍历每日数组的循环内部。每遍历到一天的数据,就会新建空DataFrame,再把当天的数组赋值给全部10列,最后一次循环执行的是第10天的逻辑,因此所有列最终都被覆盖为第10天的数值。
- 冗余的展平逻辑:numpy数组展平不需要嵌套for循环逐个取值append,直接调用
.flatten()方法即可实现,执行效率远高于手动循环。 - 字典Key不匹配:你的存储字典里的键是
day_1、day_2…day_10,但代码取值时拼接的是day_'+str(days)+'_rf',会直接触发KeyError。
修正后代码
import numpy as np import pandas as pd day = 10 # 先初始化空DataFrame,不要放在循环内部 df_xyz = pd.DataFrame() for days in np.arange(1, day+1): # 匹配字典的key,去掉多余的_rf后缀 numpy_array_to_iterate = df_dictionary['arrays_to_iterate'][f'day_{days}'] # 直接展平数组 flatten_arr = numpy_array_to_iterate.flatten() # 只给当前天对应的列赋值,不要循环给所有列赋值 col_name = f'variable_day_{days}' df_xyz[col_name] = flatten_arr df_xyz
代码说明
- 把DataFrame初始化放在循环外部,避免每次遍历都清空之前已经赋值的列
- 每次遍历只给当前日期对应的列赋值,不会覆盖其他列的内容
- 用numpy自带的flatten方法替代双层循环,代码更简洁、执行速度更快
- 修正了字典key的拼写,和你存储的结构匹配
内容的提问来源于stack exchange,提问作者Abhilash Singh Chauhan
相关产品推荐
相关产品推荐

