我正在使用月度交易文件,我必须对其进行一整年的分析,这不适合内存。所以我使用dask来做到这一点。
首先,我在pandas中处理我的文件,这样它就是大小最有效的数据帧(11列,3个bool和8个int),并将这些写入pandas的csv。如果我通过熊猫重读它们,那么这些类型应该与它们相匹配。但是,如果我在via Dask中读取它,则会将3个bool列作为对象输入,这会占用更多内存。
我检查了它是否是混合类型的问题,但是因为我在pandas中创建了bool列,添加了一个启动值为False的新列,然后根据某些条件将此值更改为True我没有找到任何缺失值或无。
我还尝试将dtypes添加到read_csv命令中,该命令应该将其传递给pandas read_csv,但这并没有改变类型,它们最终仍然是对象。
有没有办法解决这个问题,还是我错过了什么?
-Milan
编辑: @MRocklin 我做的不仅仅是以下几点:
import dask.dataframe as dd
import pandas as pd
Transaction_folder = 'localpath/Transactions_*.csv.bz2'
trans_reader = pd.read_csv('localpath/Transactions_2016.csv.bz2', nrows = 100000) #to check if reading in 1 file via pandas works as expected
trans_reader.dtypes # gives bools and ints as expected
然后:
df = dd.read_csv(Transaction_folder, compression = 'bz2')
df.dtypes # gives ints and floats for the right columns but objects for everything that was bool
可能是因为压缩吗?