在减少内存使用量后,无法使用to_csv导出csv

时间:2018-03-15 18:07:38

标签: python pandas csv types data-science

我已经通过

打开了csv文件(600mb)
df=pd.read_csv(file) 

它非常大,所以我减少了内存使用量:

before

它适用于Jupter Notebook并显示:

after

我改变了类型:

float64 ---> float32,
object ----> category,
int ------> uint16, uint8,

像这样(例如对象):

converted_obj = pd.DataFrame()
for col in df_obj.columns:
num_unique_values = len(df_obj[col].unique())
num_total_values = len(df_obj[col])

if num_unique_values / num_total_values < 0.5:
    converted_obj.loc[:,col] = df_obj[col].astype('category')
else:
    converted_obj.loc[:,col] = df_obj[col]


optimized_df[converted_obj.columns] = converted_obj
optimized_df.info() 

现在,我想将减少的DataFrame导出到csv,但在我这样做之后,文件大小增加到800mb以上(之前 - 600mb)。当我将新文件读取到Jupyter Notebook时,dtypes与还原前相同,内存使用情况相同(1.6 GB +)。我究竟做错了什么 ?如何提取减少的csv?提前谢谢。

1 个答案:

答案 0 :(得分:0)

将数据保存到csv时,它会以文本形式存储,因此您在pandas中设置的数据类型无关紧要。

减少内存使用量的方法是在read_csv函数中设置dtype参数。

定义一个将所有列名映射到dtype的字典:

df=pd.read_csv(file,dtype=dtype_dict) 

然后在read_csv中使用该字典:

forEach