本文最后更新于:4 分钟前
真实世界中我们通常要处理数据量很大的文件(千万级、亿级)。如果直接使用pandas的IO函数读取这类文件,机器的内存一般吃不消。
为了高效处理大文件,pandas的IO函数提供了分块读取的功能(通过chunksize参数实现)。我们看一个例子。
引例
'ex6.csv’是包含10000行数据的文件(下载),其结构如下:
假设现在希望统计’key’列所有值的频次。如果能一次读取该文件,可以直接使用Series.value_counts
方法解决:
df = read_csv('ex6.csv')
df.value_counts()
上述方法对于本例的数据量来说还可行,但如果文件过大,我们一般会先分块读取,再进行操作。对于本例来说就是先将文件读取为一个个块(chunk),再统计各个块的值的频次,然后将所有统计结果(Series对象)相加:
chunker = read_csv('ex6.csv', chunksize=1000) # 分块读取,每个块包含1000行数据
tot = pd.Series() # 创建空Series 用于保存中间计算结果
for chunk in chunker:
tot = tot.add(chunk['key'].value_counts(), fill_value=0) # 各chunk数值统计结果再求和
tot = tot.sort_values(ascending=False) # 降序排列
chunk['key'].value_counts()
会获得每个块的数值频次的统计结果(返回Seires对象)Series.add
方法可以实现两个Series的加法,还可以设置fill_value参数以填充空缺值。
还会陆续补充其他案例…
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!