Проблема с памятью Python, сброс, размер CSV - PullRequest
0 голосов
/ 14 ноября 2018

После решения сортировки набора данных у меня возникла проблема на этом этапе моего кода.

with open(fns_land[xx]) as infile:
    lines = infile.readlines()
    for line in lines:
        result_station.append(line.split(',')[0])
        result_date.append(line.split(',')[1])
        result_metar.append(line.split(',')[-1])

У меня проблема с линией строк.В этой строке данные иногда бывают огромными, и я получаю ошибку уничтожения.

Есть ли короткий / хороший способ переписать эту точку?

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

Если вы имеете дело с набором данных, я бы посоветовал вам взглянуть на панд , который мне очень подходит для борьбы с обработкой данных.

Если ваша проблема связана с большим набором данныхВы можете загрузить данные в виде фрагментов.

import pandas as pd
tfr = pd.read_csv('fns_land{0}.csv'.format(xx), iterator=True, chunksize=1000)
  1. Строка: импортированные модули pandas
  2. Строка: чтение данных из файла csv в виде фрагментов из 1000 строк.

Это будет тип pandas.io.parsers.TextFileReader .Чтобы загрузить весь CSV-файл, необходимо выполнить следующее:

df = pd.concat(tfr, ignore_index=True)

Параметр ignore_index = True добавлен во избежание дублирования индексов.

Теперь у вас есть всеваши данные загружены в фрейм данных.Затем выполните манипуляции с данными для столбцов как векторов, что также быстрее, чем обычные строки за строкой.

Посмотрите здесь этот вопрос , который имел дело с чем-то похожим.

0 голосов
/ 14 ноября 2018

Вместо этого используйте readline, это читает по одной строке за раз без загрузки всего файла в память.

with open(fns_land[xx]) as infile:
    while True:
        line = infile.readline()
        if not line:
            break
        result_station.append(line.split(',')[0])
        result_date.append(line.split(',')[1])
        result_metar.append(line.split(',')[-1])
...