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