如何使用pd.read_csv()来迭代块通过一个文件并保留D型和其他元信息,就好像我在整个数据集读一次?
我需要在一个数据集是太大,无法到内存中读取。 我想用pd.read_csv要导入的文件,然后立即块追加到HDFStore。 然而,数据类型推断一无所知后续块。
如果存储在表中的第一个块仅包含int和后续的组块包含浮动,一个将引发异常。 所以,我需要使用read_csv通过数据帧到第一循环和留住最推断出的类型。 此外,对于对象类型,我需要保留的最大长度,因为这些将被存储为表中的字符串。
是否有只保留此信息,而在整个数据集读取的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)