首页 > 解决方案 > 使用内部 while 循环递增 for 循环

问题描述

我想在内部while循环增加之前增加一个外部for循环。有没有办法做到这一点?我的代码如下。我希望代码在 j 递增之前遍历所有 i。谢谢

data_files = glob.glob('4e3_2048_*.ksz_cl.txt')
for i in data_files:
    data_i = pd.read_csv(i, sep=" ", header = None)
    data_i.columns = ['a', 'b', 'c']    
    cls = []
    j=0
    while j<=len(i):
        Z = [data_i['c'][j]]   
        #j=j+1
        cls.append(Z)

标签: pythonpandasnumpy

解决方案


没有办法在内部循环之前增加外部循环——首先增加外部循环只会移动到内部循环的新版本(基本上是重新开始)。我认为您想切换循环的顺序。

这是一个例子:

data_files = glob.glob('4e3_2048_*.ksz_cl.txt')
dfs = []

for file in data_files:
    df = pd.read_csv(file, sep=" ", header=None)
    df.columns = ['a', 'b', 'c']
    dfs.append(df)

cls = []

for i in range(len(dfs[0])):
    row = []
    for df in dfs:
        row.append(df['c'][i])
    cls.append(row)

第一个循环只是读取所有文件。第一个循环的逻辑可以合并到最内层循环(for df in dfs)中,如果您的文件非常大并且不能全部存储在内存中一次。将这些循环分开是很有用的,这样您就知道需要执行多少行。

这是一个只有两个循环的示例:

data_files = glob.glob('4e3_2048_*.ksz_cl.txt')
first_file = pd.read_csv(data_files[0], sep=" ", header=None) #for the loop max val
cls = []

for i in range(len(first_file)):
    row = []
    for file in data_files:
        df = pd.read_csv(file, sep=" ", header=None)
        df.columns = ['a', 'b', 'c']
        row.append(df['c'][i])
    cls.append(row)

您可能还想添加一些错误 ( IndexError) 处理。


推荐阅读