首页 > 解决方案 > 如何在生成器函数的定义中使用“分隔符”运行“pandas.read_csv”?

问题描述

CSV 文件大小如此之大(几 GB),所以我想逐步对行进行切片DataFrames并使用枢轴修改每个切片,然后将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'

我怎样才能解决这个问题?

标签: pythonpython-3.xipython

解决方案


只需将文件分成块

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')

推荐阅读