【问题标题】:Cannot export csv with to_csv after reducing memory usage减少内存使用后无法使用 to_csv 导出 csv
【发布时间】:2018-08-24 16:13:21
【问题描述】:

我已经通过

打开了 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 ?提前致谢。

【问题讨论】:

  • 文字和数字不要使用图片。
  • 你试过导出到csv.gz吗?

标签: python pandas csv types data-science


【解决方案1】:

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

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

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

dtype_dict ={'airtime':np.float32, 'Cancelled':np.uint8 ....

然后在 read_csv 中使用该字典:

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

【讨论】:

    猜你喜欢
    • 2013-05-21
    • 2014-01-19
    • 2011-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多