数据帧的块读取和写入
分块,正如其名所示,意味着以,嗯,块的形式处理文件。你按部分读取(或写入)文件。如果你使用 Zarr(见第 8.4 节)或 Dask(见第十章),你肯定会处理分块。
在这里,我们将回到我们信任的出租车示例。我们将以块的形式将文件从 CSV 转换为 Parquet,尽管文件足够小,在大多数计算机上我们可以在内存中完成这个操作,但让我们假设我们在一个内存受限的机器上,并且无法在内存中加载整个文件。
我们将使用 pandas 读取 CSV 文件,并使用 Arrow 写入 Parquet 版本。我们可以用 Arrow 完成所有操作,这将更高效,但我们想展示 pandas 分块接口
① 类型将是 pandas.io.parsers.TextFileReader。
② 每个块将是一个数据帧。
我们只需要将 chunksize 参数添加到 read_csv 中。你将不会从 read_csv 获得一个数据帧,而是一个块生成器。然后每个块将是一个数据帧,最大行数为 100 万行。
我们现在将进行适当的转换。首先,我们需要重新打开文件。我们已经遍历了所有块一次,所以我们需要回到开始
我们还需要指定一些列的数据类型;某些列的类型可能会从一块数据变化到另一块数据。这种情况在整数列中尤为常见,尤其是那些包含空值的列。当存在空值时,类型会被提升为float,因为在 pandas 中无法用整数来表示空值。