2016-05-12 4 views
0

Есть ли элегантный способ чтения одного файла за раз, выполнить некоторую предварительную обработку, а затем объединиться в один большой фрейм данных. Как я это делаю здесь. Я уверен, что может быть какой-то другой способ избавиться от переменной i здесь.Заполнение данных в цикле

i=0 
outdf = DataFrame() 
for myfile in myfiles: 
    tdf = read_csv(myfile) #Read 
    #Do some annotations 
    tdf['Class'] = os.path.basename(myfile).split[0] 
    .............. 
    #----------------- 
    if i == 0: 
     outdf = tdf 
    else: 
     outdf = concat([outdf, tdf]) 
    i = i +1 
+1

AFAIK вам не нужен i и предложение if в этом цикле. Просто используйте 'outdf = concat ([outdf, tdf])'. На первой итерации он будет выполнять конкатенацию с пустой фреймворком данных, чтобы он возвращал тот же файл данных. – ayhan

+0

В какой-то момент я начал заниматься такими забавными вещами. Большое спасибо. – learner

ответ

3

Вам не нужно конкатенировать DataFrames на каждой итерации, поскольку concat может сцепить несколько DataFrames. Просто сохраните каждый отдельный DataFrame в списке и соедините в конце.

outdf = [] 
for myfile in myfiles: 
    tdf = read_csv(myfile) 
    #Do some annotations 
    tdf['Class'] = os.path.basename(myfile).split[0] 
    .............. 
    #----------------- 
    outdf.append(tdf) 

outdf = concat(outdf) 
+0

Это также будет быстрее. – ayhan

0

Вы можете использовать перечисление.

outdf = DataFrame() 
    for i, myfile in enumerate(myfiles): 
     tdf = read_csv(myfile) 
     tdf['Class'] = os.path.basename(myfile).split[0] 
     if i == 0: 
      outdf = tdf 
     else: 
      outdf = concat([outdf, tdf]) 
Смежные вопросы