如何在 Pandas 中以小块的形式加载海量文件?
Pandas是一个灵活且易于使用的开源数据分析工具,它构建在Python之上,可以导入和可视化不同格式的数据,例如 . .csv , . tsv , . txt甚至.db文件。
对于以下示例,我们将仅考虑 . csv文件,但其他文件类型的过程类似。用于读取 CSV 文件的方法是read_csv()
Parameters:
filepath_or_bufferstr : Any valid string path is acceptable. The string could be a URL. Valid URL schemes include http, ftp, s3, gs, and file. For file URLs, a host is expected. A local file could be: file://localhost/path/to/table.csv.
iteratorbool : default False Return TextFileReader object for iteration or getting chunks with get_chunk().
chunksize : int, optional Return TextFileReader object for iteration. See the IO Tools docs for more information on iterator and chunksize.
read_csv()方法有很多参数,但我们感兴趣的是chunksize 。从技术上讲,pandas 在文件中一次读取的行数称为chunksize 。假设如果块大小为 100,那么熊猫将加载前 100 行。返回的对象不是数据框,而是需要迭代以获取数据的TextFileReader 。
示例1:正常加载海量数据。
在下面的程序中,我们将使用超过10000行的毒性分类数据集。这并不多,但对于我们的示例就足够了。
Python3
import pandas as pd
from pprint import pprint
df = pf.read_csv('train/train.csv')
df.columns
Python3
df.info()
Python3
df = pd.read_csv("train/train.csv", chunksize=10000)
print.print(df)
Python3
for data in df:
pprint(data.shape)
Python3
df = pd.read_csv("train/train.csv", chunksize=10)
for data in df:
pprint(data)
break
输出:
首先让我们加载数据集并检查不同的列数。该数据集有 8 列。
让我们深入了解数据集中的数据类型和行数。
蟒蛇3
df.info()
输出:
我们总共有159571 个非空行。
示例 2:使用chunksize参数加载大量数据。
蟒蛇3
df = pd.read_csv("train/train.csv", chunksize=10000)
print.print(df)
输出:
这里我们通过传递chunksize参数来创建一个大小为 10000 的块。返回的对象不是数据框而是迭代器,要获取数据需要遍历这个对象。
蟒蛇3
for data in df:
pprint(data.shape)
输出:
现在,计算块的数量-
蟒蛇3
df = pd.read_csv("train/train.csv", chunksize=10)
for data in df:
pprint(data)
break
输出:
在上面的示例中,返回的每个元素/块的大小为10000 。记住我们有159571。因此,块的数量是 159571/10000 ~ 15 个块,剩下的 9571 个示例形成第 16 个块。
每个块的列数为 8。因此,分块不会影响列。现在我们了解了如何使用chunksize并获取数据,让我们对数据进行最后的可视化,出于可见性目的,将块大小指定为10 。