Как запустить «pandas.read_csv» с разделителем «» внутри определения функции генератора? - PullRequest
1 голос
/ 18 мая 2019

Размер файла CSV настолько велик (несколько ГБ), поэтому я хотел разделить строку поэтапно и изменить каждый нарезанный DataFrames с помощью pivot, а затем объединить DataFrames.

Я использовал функцию генератора для нарезки данных по строкам, но я не смог застрять в аргументе 'delimeter' в pandas.read_csv, как показано ниже.

import pandas as pd

def generator():
  for x in range(0,366130,11):
    yield pd.read_csv(filename, nrows = x, delimeter='\x01', header=None)

g = generator()
df = next(g)

df

Когда я запустил этот код, я получил следующую ошибку в ipython:

TypeError: Traceback (most recent call last)
<ipython-input-76-7e0eb8a3d8b6> in <module>
----> 1 df1 = next(g)
      2 df1

<ipython-input-75-fae533ab2013> in generator()
      2 #      print("homework_1_1")
      3     for x in range(0,366130,11):
----> 4       yield pd.read_csv(filename, nrows = x, delimeter='\x01', header=None)
      5 
      6 g = generator()

TypeError: parser_f() got an unexpected keyword argument 'delimeter'

Как я могу это исправить?

1 Ответ

0 голосов
/ 18 мая 2019

просто разбить файл на куски

http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_csv.html

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

chunksize = 10 ** 6
for chunk in pd.read_csv(filename, chunksize=chunksize):
    process(chunk)

ИЛИ

также вы можете использовать Dask Library

https://pythondata.com/dask-large-csv-python/

import dask.dataframe as dd

filename = '311_Service_Requests.csv'
df = dd.read_csv(filename, dtype='str')
...