Как ускорить итерацию в Python?

у меня 100000 файлов, которые мне нужно прочитать пандасом. На это уходит 50 минут, есть ли возможность както ускорить? Пытался разобраться с аотоками, но не смог сделать даже прототип. можете помочь?

Есть ли возможность быстрее проходить цикл? Единственная проблема, что в одном файле может быть несколько “text” Из-за этого приходится проходиться по всему набору данных

код:

%%time
datas = pd.DataFrame({'text': [], 'category': [], 'data': [], 'file': []})
n1 = 0

leng = len(os.listdir('.//Данные/test/'))
for file in os.listdir('.//Данные/test/'):
    try:
        data = pd.read_json(f'Данные/test/{file}', lines=True)
        n1=n1+1
        if n1%100==0:
            print(f'{n1} out of {leng}')
        for i in range(10):
            for i2 in range(10):
                try:
                    datas = datas.append(
                        {
                            'text':
                            data.at[0,'feed'][i]['payload']['body'][i2]['text'],
                            'category':
                            df['reason'][0]['name'],
                            'data':
                            df.at[0,'feed'][i]['payload']['dt'],
                            'file':
                            str(file)
                        },
                        ignore_index=True)

                    break

                except Exception as e :
                    continue

            #break
    except Exception as e:
        print('ERROR', str(file), e)
        
datas['text']= datas[['file','text','category']].groupby(['file'])['text'].transform(lambda x: ','.join(x))
datas.drop_duplicates(inplace=True)
datas.reset_index(inplace=True, drop=True)


Ответы (1 шт):

Автор решения: Dimas

Всем спасибо, ускорил с помощью данной функции. из-за нее мне не приходится пробегаться много раз по df

def json_pars(*, json_array:json, result_list:list=None, key:str)-> list:
    if result_list is None:
        result_list=[]
    if isinstance(json_array, list):
        for i in json_array:
            json_pars(json_array=i, result_list=result_list, key=key)
    if isinstance(json_array, dict):
        for i in json_array.keys():
            array = json_array[i]
            if i ==key:
                result_list.append(array)
            else:
                json_pars(json_array=array, result_list=result_list, key=key )
    return result_list

И я сразу нахожу нужные атрибуты в json файле

полный код:

%%time
df = pd.DataFrame({
    'text':[],
    'category':[],
    'date':[]
})

for file in os.listdir('./'):
    try:
        with open(f'./{file}', 'r', encoding='utf-8') as file:
            json_array = json.loads(file.read())
            df = df.append({
                'text':' '.join(json_pars(json_array=json_array, key='text')),
                'category':json_pars(json_array=json_array, key='category')[0]['name'],
                'date':json_pars(json_array=json_array, key='dt')[-1]
                
            }, ignore_index=True)
    except Exception as e:
        print(e)
→ Ссылка