Python 如何在使用pandas read_csv和chunksize选项读取时跳过csv文件中的页脚

Python 如何在使用pandas read_csv和chunksize选项读取时跳过csv文件中的页脚,python,python-3.x,pandas,csv,Python,Python 3.x,Pandas,Csv,我正在使用pandas.read_csv()和chunksize=500000读取大型csv文件。 因为我使用的是chunksize,所以“skipfooter=1”选项不适用于chunksize,因为它返回的是生成器而不是数据帧 分块读取时,从文件中跳过页脚记录的最佳方法是什么?类似的方法可以工作: import pandas chunksize = 5 csv = pandas.read_csv('sample.csv', chunksize=chunksize) class NextI

我正在使用pandas.read_csv()和chunksize=500000读取大型csv文件。 因为我使用的是chunksize,所以“skipfooter=1”选项不适用于chunksize,因为它返回的是生成器而不是数据帧


分块读取时,从文件中跳过页脚记录的最佳方法是什么?

类似的方法可以工作:

import pandas

chunksize = 5
csv = pandas.read_csv('sample.csv', chunksize=chunksize)

class NextIterator:
    def __init__(self, iterator):
        self._iterator = iterator
        self._buffer = []

    def __iter__(self):
        return self

    @property
    def has_next(self):
        try:
            self._buffer = [next(self._iterator)]
            return True
        except StopIteration:
            return False

    def __next__(self):
        if self._buffer:
            return self._buffer.pop()
        else:
            # returns the dataframe
            return next(self._iterator)

has_next = True
b = NextIterator(csv)
while has_next:
    a = next(b)
    if b.has_next:
        print(a)
    else:
        print(a[:-1])
        has_next = False
您不一定需要创建一个类,但我发现它很有用


使用next并捕获
StopIteration
,您可以检查迭代器中是否有更多内容。如果没有,您可以只分割块以排除最后一个元素。

类似的方法可以:

import pandas

chunksize = 5
csv = pandas.read_csv('sample.csv', chunksize=chunksize)

class NextIterator:
    def __init__(self, iterator):
        self._iterator = iterator
        self._buffer = []

    def __iter__(self):
        return self

    @property
    def has_next(self):
        try:
            self._buffer = [next(self._iterator)]
            return True
        except StopIteration:
            return False

    def __next__(self):
        if self._buffer:
            return self._buffer.pop()
        else:
            # returns the dataframe
            return next(self._iterator)

has_next = True
b = NextIterator(csv)
while has_next:
    a = next(b)
    if b.has_next:
        print(a)
    else:
        print(a[:-1])
        has_next = False
您不一定需要创建一个类,但我发现它很有用


使用next并捕获
StopIteration
,您可以检查迭代器中是否有更多内容。如果没有,您可以只分割块以排除最后一个元素。

为什么不能在事实发生后将其子集?不确定如何跟踪最后一个块以删除页脚行。是否要删除每个块的页脚?否,仅从最后一个区块开始。页脚是整个文件的最后一条记录,其大小超过3GB。我是说,在读入所有内容后,只需删除页脚。为什么不能在事实发生后将其子集删除?不确定如何跟踪最后一个区块以删除页脚行。是否要删除每个区块的页脚?不,只有最后一块。Footer是整个文件的最后一条记录,大小超过3GB。我的意思是,在您阅读完所有内容后,只需删除Footer。