使用 chunksize 迭代获取推断的数据帧类型

2023-11-27

如何使用 pd.read_csv() 迭代地对文件进行分块并 保留数据类型和其他元信息,就像我阅读了整个内容一样 一次数据集?

我需要读取太大而无法装入内存的数据集。我想使用 pd.read_csv 导入文件,然后立即将块附加到 HDFStore 中。然而,数据类型推断对后续块一无所知。

如果表中存储的第一个块仅包含 int,而后续块包含 float,则会引发异常。所以我需要首先使用 read_csv 迭代数据框并保留highest推断类型。此外,对于对象类型,我需要保留最大长度,因为它们将作为字符串存储在表中。

是否有一种只保留这些信息而不读取整个数据集的 pandonic 方法?


我没想到会这么直观,否则我不会发布这个问题。但熊猫再次让事情变得轻而易举。但是,保留这个问题,因为此信息可能对其他处理大数据的人有用:

In [1]: chunker = pd.read_csv('DATASET.csv', chunksize=500, header=0)

# Store the dtypes of each chunk into a list and convert it to a dataframe:

In [2]: dtypes = pd.DataFrame([chunk.dtypes for chunk in chunker])

In [3]: dtypes.values[:5]
Out[3]:
array([[int64, int64, int64, object, int64, int64, int64, int64],
       [int64, int64, int64, int64, int64, int64, int64, int64],
       [int64, int64, int64, int64, int64, int64, int64, int64],
       [int64, int64, int64, int64, int64, int64, int64, int64],
       [int64, int64, int64, int64, int64, int64, int64, int64]], dtype=object)

# Very cool that I can take the max of these data types and it will preserve the hierarchy:

In [4]: dtypes.max().values
Out[4]: array([int64, int64, int64, object, int64, int64, int64, int64], dtype=object)

# I can now store the above into a dictionary:

types = dtypes.max().to_dict()

# And pass it into pd.read_csv fo the second run:

chunker = pd.read_csv('tree_prop_dset.csv', dtype=types, chunksize=500)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 chunksize 迭代获取推断的数据帧类型 的相关文章

随机推荐