Создать кадр данных Polars, содержащий уникальные значения из набора CSVPython

Программы на Python
Ответить
Anonymous
 Создать кадр данных Polars, содержащий уникальные значения из набора CSV

Сообщение Anonymous »

У меня есть +3000 CSV-файлов с +10 столбцами. Мне нужно получить все уникальные значения всего из двух из них. Я могу читать уникальные значения в полярах:

Код: Выделить всё

import polars as pl

df1 = pl.read_csv("test1.biobank.tsv.gz", separator='\t', schema_overrides={"#chrom": pl.String}, n_threads=8, columns=["#chrom", "pos"], new_columns=["chr", "pos"]).unique()
Остальные файлы я могу прочитать один за другим, т.е.:

Код: Выделить всё

df2 = pl.read_csv("test2.biobank.tsv.gz", separator='\t', schema_overrides={"#chrom": pl.String}, n_threads=8, columns=["#chrom", "pos"], new_columns=["chr", "pos"]).unique()
проверьте, все ли значения не равны:

Код: Выделить всё

if not df1.equals(df2):
df = df1.vstack(df2)
del(df1)
del(df2)
затем .unique(). Но поскольку все входные файлы уже отсортированы по двум столбцам (chr, pos), а различия исчисляются тысячами из 16 миллионов входных строк, я надеюсь, что есть лучший способ сделать это.
Заранее спасибо за помощь
DK
редактировать
Есть другой способ сделать это, используя Polars и DuckDB.
/>
  • создать файлы паркета для каждого из входов

Код: Выделить всё

tsv_pattern = "gwas_*.gz"

for fn in glob.glob(tsv_pattern):
print(fn)
parquet_fn = fn.replace(".gz", ".chr_pos.parquet")
df = pl.read_csv(fn, separator='\t', schema_overrides={"#chrom": pl.Utf8}, n_threads=8, columns=["#chrom", "pos"], new_columns=["chr", "pos"]).unique()
df.to_parquet(parquet_fn, compression='zstd')
del(df)

  • запустите DuckDB и выполните:

Код: Выделить всё

CREATE TABLE my_table AS SELECT DISTINCT * FROM 'my_directory/*.parquet'
Благодарность принадлежит Марку Мизерину из DuckDB

Подробнее здесь: https://stackoverflow.com/questions/700 ... et-of-csvs
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»