You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何正确赋值df.iloc[:,:-1]至变量,避免内存错误?

解决df.iloc[:,:-1]赋值时的内存错误问题

内存错误是因为你的DataFrame规模过大,直接切片赋值会把全部数据加载到内存中,以下是几种可行的解决方案:

  • 压缩数据类型:检查并转换列的数值类型,用更小的存储空间存储数据。比如将float64转为float32,int64转为int32,若数值范围在0-255内可转为uint8:

    for col in df.select_dtypes(include=['int64', 'float64']).columns:
        if df[col].min() >= 0 and df[col].max() <= 255:
            df[col] = df[col].astype('uint8')
        elif df[col].dtype == 'int64':
            df[col] = df[col].astype('int32')
        else:
            df[col] = df[col].astype('float32')
    x = df.iloc[:, :-1]
    
  • 分块处理数据:如果不需要一次性加载全量数据,可通过分块读取原始文件(如CSV),逐块处理或增量训练SVM:

    chunk_size = 10000  # 根据内存调整块大小
    for chunk in pd.read_csv('your_data_source.csv', chunksize=chunk_size):
        x_chunk = chunk.iloc[:, :-1]
        # 在这里执行针对单块的SVM训练逻辑(如使用增量学习方法)
    
  • 转为稀疏矩阵:若数据存在大量零值(比如图像数据),将数据转为稀疏矩阵格式,能显著降低内存占用,且多数SVM库支持稀疏矩阵输入:

    from scipy.sparse import csr_matrix
    
    x_sparse = csr_matrix(df.iloc[:, :-1].values)
    # 直接用x_sparse传入SVM模型进行训练
    
  • 手动释放内存:在赋值前清理无用变量并触发垃圾回收,腾出内存空间:

    import gc
    
    del [var_name for var_name in dir() if var_name not in ['df']]  # 删除无关变量
    gc.collect()
    x = df.iloc[:, :-1]
    

内容的提问来源于stack exchange,提问作者AaronTan21

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 23:45:45