当要处理一个较大文件时,一次性加载到内存可能导致内存溢出,pandas提供了一种以迭代器的方式读取文件,我们可以手动设置每个批次要读取的数据条数chunkSize。
import pandas as pd
import chardet
# 检测文件编码
with open(r'data.txt', 'rb') as f:
encode = chardet.detect(f.readline())['encoding']
print(encode)
# 建议如果检测出编码为ascii 则采用utf-8编码
reader = pd.read_csv(r'data.txt', iterator=True, encoding=encode, sep='\t')
# type(reader) is
#reader = pd.read_csv(files_name,
# engine='python',
# sep=separation,
# encoding='utf-8',
# iterator=True,
# error_bad_lines=False
#)
# 每次读取的行数
chunkSize = 10000
chunks = []
while True:
try:
chunk = reader.get_chunk(chunkSize)
# type(chunk) is
# 需要注意的是文件的列名
# do something
chunks.append(chunk)