#python #dataframe #indexing #row #increment
#python #фрейм данных #индексирование #строка #увеличивайте
Вопрос:
Я читаю несколько строк за раз из фрейма данных, чтобы обработать около 1,3 млн строк для классификации текста. Я вручную обновляю количество строк, которые должны быть прочитаны и обработаны, используя df.iloc[from_row:to_row]
Я использую Colab для текущего действия. У меня есть отдельные блоки кодов, которые я использую в качестве потока для окончательной загрузки классифицированного фрейма данных с нарезанными строками.
Хотелось бы автоматически увеличивать числа from_row:to_row на 100 или 500 или 1000 после загрузки обработанного фрейма данных после каждого приращения, пока не будет обработана последняя строка
temp = temp.iloc[100:201] ##Manually updating this part and running rest of the code
test=[]
**# classifiying sentences in text column**
for row in tqdm(temp['comments'].values):
res = label_classify(row)
test.append(res)
temp['test'] = test
**# mapping right labels to appropriate rows**
list_of_rows = temp.test.to_list()
th = 0.4 #whatever threshold value you want
result = list(map(lambda x: get_label_score_dict(x, th), list_of_rows))
result_df = pd.DataFrame(result)
**## concatenating labeled df to original df and downloading (to avoid losing processed data incase Colab reconnects or I lose the session)**
*# Merging dfs*
temp.reset_index(drop=True, inplace=True)
concatenated_df_new = pd.concat( [temp, result_df], axis=1)
merge_df = pd.DataFrame()
merge_df = pd.concat([merge_df,concatenated_df_new], axis=0, ignore_index=True)
**# downloading final dataframe**
from google.colab import files
merge_df.to_csv('merge_nps.csv')
files.download('merge_nps.csv')
Для этого может быть совершенно другой способ. Я кодирую на python только в течение более короткого времени.
любая помощь или идеи о том, как я могу записать это как функцию или как увеличить счетчик (df.iloc[from_row:to_row]), были бы полезны.
Комментарии:
1. Я не понимаю, почему вы не можете поместить
df.iloc[:]
…?2. @N.JonasFigge не могли бы вы уточнить. не понял вашего предложения
3. Обычно вы можете использовать
:
для получения всех элементов — я не понимаю, почему вы должны делать это последовательно…4. @N.JonasFigge Мне пришлось бы обработать 1,3 млн строк, а расчетное время обработки всех строк в Colab составляет около 17 часов с использованием метода .apply(лямбда-строка: label_classify(строка)). Итак, я пытаюсь загружать свои обработанные выходные данные для каждой итерации, чтобы избежать потери обработанных данных в случае закрытия моего сеанса.
Ответ №1:
Если вы хотите выполнить какую-то пакетную обработку, вы можете использовать это:
import numpy as np
batch_size = 1024 # or whatever you want the batch size to be
num_samples = 1.3e6 # or whatever the exact value is
num_batches = int(np.ceil(num_samples / batch_size))
for i in range(num_batches):
temp = temp.iloc[i*batch_size : (i 1)*batch_size]
#... rest of the code
Непроверенный, но вы поняли идею.