Как ускорить итерацию в 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)