如何在Python for循环中同时迭代DataFrame及其索引构建二维矩阵?
如何同时迭代列表中的DataFrame及其索引序号?
问题背景
现有读取CSV文件并存储为DataFrame列表的代码:
path_real = r'C:/Users/SLR CSV' all_files_real = glob.glob(os.path.join(path , "2*.csv.zip")) list_real = [] for filename in all_files_real: df_real = pd.read_csv(filename, index_col=None, header=0, sep=';') list_real.append(df_real)
在遍历list_real进行计算时,当前代码框架如下:
for lst in list_real : lst=datareal # 一些计算代码 a=[] # 另一个循环 b=x/zzz a.append(b)
需要在外层for循环中同时获取每个DataFrame(lst)以及它在list_real中的索引序号,这样就能把每个DataFrame计算得到的列表a作为列赋值到二维matrix中,实现类似以下的操作:
for i in range (row): matrix[i][col]=a[i]
解决方案
直接使用Python内置的enumerate()函数即可,它能在遍历可迭代对象时同时返回索引序号和对应元素。
修改后的外层循环代码如下:
# 假设matrix已经提前初始化好,行数与a的长度一致,列数等于list_real的长度 for idx, datareal in enumerate(list_real): # 一些计算代码 a = [] # 另一个循环,生成a列表(示例逻辑) for x, zzz in zip(some_x_list, some_zzz_list): b = x / zzz a.append(b) # 将a作为第idx列赋值到matrix中 for i in range(len(a)): matrix[i][idx] = a[i]
关键说明
enumerate(list_real)会返回迭代器,每次迭代产出元组(索引序号, 对应的DataFrame)- 把原代码中
lst=datareal的赋值逻辑调整为直接从enumerate获取datareal,避免变量混淆 - 索引序号
idx可直接作为matrix的列号,完成对应列的赋值操作
内容的提问来源于stack exchange,提问作者beginner
相关产品推荐
相关产品推荐

