ошибка памяти при чтении csv большого размера в pandas

Память моего ноутбука составляет 8 гигабайт, и я пытался прочитать и обработать большой CSV-файл, и у меня возникли проблемы с памятью. Я нашел решение, которое использует chunksize для обработки файла по частям, но, по-видимому, когда uisng chunsize формата файла vecoe textreaderfile, и код, который я использовал для обработки обычных CSV-файлов, больше не работает, это код, который я пытаюсь использовать, чтобы прочитать, сколько предложений внутри CSV-файла.

wdata = pd.read_csv(fileinput, nrows=0,).columns[0]
skip = int(wdata.count(' ') == 0)
wdata = pd.read_csv(fileinput, names=['sentences'], skiprows=skip, chunksize=1000)

data = wdata.count()
print(data)

ошибка, которую я получаю: -

Traceback (most recent call last):
  File "table.py", line 24, in <module>
    data = wdata.count()
AttributeError: 'TextFileReader' object has no attribute 'count'

Я попробовал и другой способ, запустив этот код


TextFileReader = pd.read_csv(fileinput, chunksize=1000)  # the number of rows per chunk

dfList = []
for df in TextFileReader:
    dfList.append(df)

df = pd.concat(dfList,sort=False)
print(df)

и выдает эту ошибку


   data = self._reader.read(nrows)
  File "pandas/_libs/parsers.pyx", line 881, in pandas._libs.parsers.TextReader.read
  File "pandas/_libs/parsers.pyx", line 908, in pandas._libs.parsers.TextReader._read_low_memory
  File "pandas/_libs/parsers.pyx", line 950, in pandas._libs.parsers.TextReader._read_rows
  File "pandas/_libs/parsers.pyx", line 937, in pandas._libs.parsers.TextReader._tokenize_rows
  File "pandas/_libs/parsers.pyx", line 2132, in pandas._libs.parsers.raise_parser_error
pandas.errors.ParserError: Error tokenizing data. C error: Expected 2 fields in line 3, saw 4


person programming freak    schedule 20.01.2020    source источник


Ответы (1)


Вы должны перебирать куски:

csv_length = 0    
for chunk in pd.read_csv(fileinput, names=['sentences'], skiprows=skip, chunksize=10000):
    csv_length += chunk.count()
print(csv_length )
person luigigi    schedule 20.01.2020
comment
это печатает 1000, 1000, 1000, 1000 более чем 200 раз - person programming freak; 20.01.2020
comment
@programmingfreak да. очевидно. вы читаете фрагменты длиной 1000 и печатаете длину - person luigigi; 20.01.2020
comment
@programmingfreak вам нужно добавить количество каждого фрагмента в переменную, чтобы получить полную длину - person luigigi; 20.01.2020
comment
Я знаю, что пытался добавить их все, чтобы напечатать длину файла, но по какой-то причине это автоматически остановило процесс, есть ли способ обойти это? - person programming freak; 20.01.2020
comment
Я также попробовал другой код, проверьте вопрос, если можете - person programming freak; 20.01.2020
comment
другая попытка действительно не имеет смысла. вашей памяти слишком мало для обработки полного CSV. вы не можете читать куски и добавлять их вместе. вы должны обработать каждый фрагмент и очистить его из памяти - person luigigi; 20.01.2020
comment
спасибо за разъяснение, чувак, я все еще новичок в этом деле, пытаюсь заставить некоторые вещи работать - person programming freak; 20.01.2020
comment
@programmingfreak рад, что смог помочь - person luigigi; 20.01.2020
comment
Я хочу спросить еще кое о чем, если вы свободны, мы можем перейти к чату? - person programming freak; 20.01.2020
comment
Давайте продолжим это обсуждение в чате. - person programming freak; 20.01.2020