Объединение большого фрейма данных с меньшим (большой предоставляется в виде буфера) - PullRequest
2 голосов
/ 21 апреля 2019

Я новичок в пандах и хотел бы воспользоваться вашей помощью.

У меня есть два файла, один из них очень большой (100G +), который мне нужно объединить, основываясь на некоторых столбцах. Я пропускаю несколько строк в большом файле, таким образом, я получаю файл как буфер для метода read_csv.

Фирси, я пытался использовать панд. Однако когда я попытался открыть файл с помощью pandas, процесс был остановлен операционной системой.

with open(self.all_file, 'r') as f:
    line = f.readline()
    while line.startswith('##'):
          pos = f.tell()
          line = f.readline()
    f.seek(pos)
    return pd.read_csv(f,sep='\t')

Впоследствии я попытался использовать dask вместо pandas, однако dask не может получить буфер в качестве входных данных для метода read_csv, и это не удалось.

    return dd.read_csv(f,sep='\t')

Как открыть большой файл в виде буфера и объединить два кадра данных?

Спасибо!

1 Ответ

0 голосов
/ 22 апреля 2019

IIUC:

  • вы знаете номера строк, которые хотите пропустить
  • , так как это строки заголовка VCF, эти строки появляются только в начале файла

Таким образом, вы все еще можете использовать dd.read_csv, поскольку принимает ключевые слова из pandas.read_csv, такие как skiprows

  • см. это сообщение SO для pandas примера с skiprows
    • , если skiprows является целым числом (например, 2), то .read_csv пропустит 2 строки
    • , если skiprows представляет собой список целых чисел (например, [2,3]), то .read_csv пропустит номера строк (в файле .csv), начиная с номера строки 0

Итак, вы можете прочитать оба файла в .csv файлах с помощью dask

df_1 = dd.read_csv('file_1.csv', skiprows=2, sep='\t') # skip line numbers 1, 2
df_2 = dd.read_csv('file_2.csv', skiprows=[10, 16]) # skip line numbers 11, 17

Затем объединить 2 DataFrame с dask .merge

df_merged = dd.merge(df_1, df_2, left_on='abcd', right_on='abcde')

Если это то, что вы просите, вам не нужно использовать буфер.

...