1. 普通文件读取方式:
import pandas as pd
df = pd.read_csv('./chunk_test.csv') # 默认 iterator=False,chunksize=None
print(df.shape,'\n',df.head())
一般使用read_csv的时候,iterator是设定为False的,这个时候read_csv会把整个文件的数据读取到DataFrame中,这样就会很吃内存。而当iterator被设置成True的时候,read_csv就会迭代读取数据,而不会一次性读取。这样就会返回一个TextFileReader的迭代器。
2. 大数据文本读取方式
# chunk 读取方式一
reader = pd.read_csv('./chunk_test.csv', iterator=True)
chunksize=1000
chunk = reader.get_chunk(chunksize) # 获取前1000条数据
print(chunk.shape,'\n',chunk.head(5))
# chunk 读取方式二
reader = pd.read_csv('./chunk_test.csv', iterator=True, chunksize=1000) # 每1000条数据为一个chunk
for chunk in reader:
print(chunk.shape,'\n',chunk.head(5))
break
返回的reader是TextFileReader类型,它指向若干个chunk位置,只在访问数据的时候才真正把数据读入到内存。
这是一个可迭代的类型,采用for in的形式,即可逐个访问chunk。每个chunk都是dataframe类型的。
总结:
共有三种情况
iterator=False 将整个文件读入内存
iterator=True chunksize=None 需要采用 chunk = reader.get_chunk(chunksize) 获取指定数量的数据 并返回一个dataframe
iterator=True chunksize=1000 需要采用 for chunk in reader: 迭代获取dataframe 每个dataframe的行数为1000
Ref:
Python chunk读取超大文件 https://blog.csdn.net/w55100/article/details/90111254
Python如何读取、拆分大文件 https://www.jianshu.com/p/f935673ef524
pandas.read_csv参数整理 https://www.cnblogs.com/datablog/p/6127000.html