获取推断反复使用CHUNKSIZE数据帧类型(Get inferred dataframe type

2019-08-17 20:14发布

如何使用pd.read_csv()来迭代块通过一个文件并保留D型和其他元信息,就好像我在整个数据集读一次?

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

如果存储在表中的第一个块仅包含int和后续的组块包含浮动,一个将引发异常。 所以,我需要使用read_csv通过数据帧到第一循环和留住推断出的类型。 此外,对于对象类型,我需要保留的最大长度,因为这些将被存储为表中的字符串。

是否有只保留此信息,而在整个数据集读取的pandonic方式?

Answer 1:

我没想到会是这样直观的,否则我也不会贴的问题。 但再次,大熊猫使事情变得轻而易举。 然而,保持了一个问题,这些信息可能是其他大数据工作有用:

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)


文章来源: Get inferred dataframe types iteratively using chunksize