В настоящее время у меня есть сценарий, который объединит несколько CSV-файлов в один, сценарий работает нормально, за исключением того, что у нас очень быстро заканчивается RAM, когда начинают использоваться файлы большего размера. Это проблема по одной причине: скрипт запускается на сервере AWS, а нехватка ОЗУ означает сбой сервера. В настоящее время ограничение размера файла составляет около 250 МБ каждый, что ограничивает нас двумя файлами, однако, поскольку я работаю в компании Biotech, и мы используем файлы генетического секвенирования, используемые нами файлы могут иметь размер от 17 МБ до 700 МБ. в зависимости от эксперимента. Моя идея состояла в том, чтобы загрузить один фрейм данных в память целиком, а затем разделить на части другие и итеративно объединить, это не сработало.
Мои фреймы данных похожи на это (они могут различаться по размеру, но некоторые столбцыостаются неизменными; «Mod», «AA» и «Nuc»)
+-----+-----+-----+-----+-----+-----+-----+-----+
| Mod | Nuc | AA | 1_1 | 1_2 | 1_3 | 1_4 | 1_5 |
+-----+-----+-----+-----+-----+-----+-----+-----+
| 000 | ABC | ABC | 10 | 5 | 9 | 16 | 8 |
+-----+-----+-----+-----+-----+-----+-----+-----+
| 010 | CBA | CBA | 0 | 1 | 4 | 9 | 0 |
+-----+-----+-----+-----+-----+-----+-----+-----+
При объединении двух кадров мне нужно, чтобы они объединялись в «Mod», «Nuc» и «AA», так что яесть что-то похожее на это
+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
| Mod | Nuc | AA | 1_1 | 1_2 | 1_3 | 1_4 | 1_5 | 2_1 | 2_2 | 2_3 |
+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
| 000 | ABC | ABC | 10 | 5 | 9 | 16 | 8 | 5 | 29 | 0 |
+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
| 010 | CBA | CBA | 0 | 1 | 4 | 9 | 0 | 0 | 0 | 1 |
+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
У меня уже есть код для изменения имен заголовков, так что я не беспокоюсь об этом, однако, когда я использую чанки, я получаю что-то ближе к
+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
| Mod | Nuc | AA | 1_1 | 1_2 | 1_3 | 1_4 | 1_5 | 2_1 | 2_2 | 2_3 | 3_1 | 3_2 | 3_3 |
+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
| 000 | ABC | ABC | 10 | 5 | 9 | 16 | 8 | 5 | 29 | 0 | NA | NA | NA |
+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
| 010 | CBA | CBA | 0 | 1 | 4 | 9 | 0 | NA | NA | NA | 0 | 0 | 1 |
+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
в основном он обрабатывает каждый кусок как новый файл, а не из одного и того же.
Я знаю, почему он это делает, но я не уверен, как это исправить, сейчас мой код для чанкинга очень прост.
file = "tableFile/123456.txt"
initDF = pd.read_csv(file, sep="\t", header=0)
file2 = "tableFile/7891011.txt"
for chunks in pd.read_csv(file2, sep="\t", chunksize=50000, header=0):
initDF = initDF.merge(chunks, how='right', on=['Mod', "Nuc", "AA"])
, как вы можете видеть, он довольно просткости, как я уже сказал, я знаю, почему он делает то, что делает, но у меня нет опыта ни с Pandas, ни с объединениями датафреймов, чтобы иметь возможность это исправить, поэтому любая помощь будет высоко цениться. Я также не мог найти ничего подобного, пока искал в стеке и в Google.