Случайным образом разбить большой CSV-файл на более мелкие CSV-файлы.Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Случайным образом разбить большой CSV-файл на более мелкие CSV-файлы.

Сообщение Anonymous »

Я хочу перетасовать CSV-файл, слишком большой для одновременной загрузки в ОЗУ моего устройства. Мой план состоял в том, чтобы использовать csv.DictReader для просмотра всего файла и случайной записи каждой строки в один из набора меньших файлов с помощью csv.DictWriter, затем перетасовать все меньшие файлы, а затем снова объединить их. Однако я не могу пройти первый шаг, так как файлы меньшего размера не могут быть открыты с помощью pandas, поскольку он выдает следующую ошибку: pandas.errors.EmptyDataError: Нет столбцов для анализа из файла.
Чтобы выполнить первый шаг, я составил список файлов csv DictWriter, по одному для каждого небольшого файла, на который я хочу разделить основной файл, чтобы случайным образом назначить каждую строку основного файла одному из файлов DictWriter. Вот фиктивный пример, иллюстрирующий идею первого шага, но для синтетически созданного файла CSV, который выдает ту же ошибку:

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

import pandas as pd
import random
import numpy as np
import csv
import os

#First, creating a dummy file just containing integers 0-19 over 2 columns.

data=pd.DataFrame({'col1':list(range(10)),'col2':list(range(10,20))})
data.to_csv('test_file.csv',index=False)

n_chunks=2 #For this example I only split the dummy file into two smaller files

#Next, make a list of DictWriter objects, one for each smaller file
file_names=[f"test_batch_{batch_no}.csv" for batch_no in list(range(n_chunks))]
chunks=[csv.DictWriter(open(file_name,'w'),["col1","col2"]) for file_name in file_names]

#Make headers for each smaller file
for chunk in chunks:
chunk.writeheader()

#Now, randomly assign each line in test_file.csv to one of the smaller files.
with open("test_file.csv",newline='') as data:
reader=csv.DictReader(data)
for line in reader:
i=random.randint(0,n_chunks-1)
chunks[i].writerow(line)

for file_name in file_names:
#The next line gives the error.
chunk=pd.read_csv(file_name)
Странно то, что файлы меньшего размера полностью состоят из строк, непосредственно скопированных из основного файла, который в этом примере сам был создан как файл pandas и может быть загружен как кадр данных pandas. без проблем. Более того, когда я проверяю оба созданных файла меньшего размера («test_batch_0.csv» и «test_batch_1.csv»), например. блокнот, для меня они выглядят как обычные файлы csv, но pd.read_csv почему-то не может их прочитать.
Я пытался изменить параметры новой строки для команд «открыть», так как я нашел в В предыдущих сообщениях говорилось, что ошибка «Нет столбцов для анализа файла формы» иногда возникает из-за неправильных символов новой строки, но безрезультатно.
Для полноты приведем полный путь к ошибке:

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

Traceback (most recent call last):
File "[...]/main.py", line 29, in 
chunk=pd.read_csv(file_name)
^^^^^^^^^^^^^^^^^^^^^^
File "[...]/.venv/lib/python3.12/site-packages/pandas/io/parsers/readers.py", line 1026, in read_csv
return _read(filepath_or_buffer, kwds)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "[...]/.venv/lib/python3.12/site-packages/pandas/io/parsers/readers.py", line 620, in _read
parser = TextFileReader(filepath_or_buffer, **kwds)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "[...]/.venv/lib/python3.12/site-packages/pandas/io/parsers/readers.py", line 1620, in __init__
self._engine = self._make_engine(f, self.engine)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "[...]/.venv/lib/python3.12/site-packages/pandas/io/parsers/readers.py", line 1898, in _make_engine
return mapping[engine](f, **self.options)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "[...].venv/lib/python3.12/site-packages/pandas/io/parsers/c_parser_wrapper.py", line 93, in __init__
self._reader = parsers.TextReader(src, **kwds)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "parsers.pyx", line 581, in pandas._libs.parsers.TextReader.__cinit__
pandas.errors.EmptyDataError: No columns to parse from file

Заранее большое спасибо!

Подробнее здесь: https://stackoverflow.com/questions/791 ... aller-csvs
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Скрипт Python случайным образом терпит неудачу с использованием Pandas случайным образом выходит из строя
    Anonymous » » в форуме Python
    0 Ответы
    23 Просмотры
    Последнее сообщение Anonymous
  • Сервер Socket Socket висит случайным образом, а ошибка дешифрования RSA возникает случайным образом
    Anonymous » » в форуме Python
    0 Ответы
    27 Просмотры
    Последнее сообщение Anonymous
  • Как разбить массив на более мелкие массивы?
    Anonymous » » в форуме JAVA
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • Как разбить массив на более мелкие массивы?
    Anonymous » » в форуме JAVA
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous
  • Как разбить массив на более мелкие массивы?
    Anonymous » » в форуме JAVA
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous

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