
您可以分批读取csv。由于
pd.read_csv在
chunksize指定参数时将返回迭代器,因此您可以使用它
itertools.takewhile来读取所需数量的块,而无需读取整个文件。
import itertools as ITimport pandas as pdchunksize = 10 ** 5chunks = pd.read_csv(filename, chunksize=chunksize, header=None)chunks = IT.takewhile(lambda chunk: chunk['B'].iloc[-1] < 10, chunks)df = pd.concat(chunks)mask = df['B'] < 10df = df.loc[mask]
或者,为了避免不得不
df.loc[mask]从最后一个块中删除不需要的行,也许更干净的解决方案是定义一个自定义生成器:
import itertools as ITimport pandas as pddef valid(chunks): for chunk in chunks: mask = chunk['B'] < 10 if mask.all(): yield chunk else: yield chunk.loc[mask] breakchunksize = 10 ** 5chunks = pd.read_csv(filename, chunksize=chunksize, header=None)df = pd.concat(valid(chunks))
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)