我已经通过
打开了csv文件(600mb)df=pd.read_csv(file)
它非常大,所以我减少了内存使用量:
它适用于Jupter Notebook并显示:
我改变了类型:
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?提前谢谢。
答案 0 :(得分:0)
将数据保存到csv时,它会以文本形式存储,因此您在pandas中设置的数据类型无关紧要。
减少内存使用量的方法是在read_csv函数中设置dtype参数。
定义一个将所有列名映射到dtype的字典:
df=pd.read_csv(file,dtype=dtype_dict)
然后在read_csv中使用该字典:
forEach