如何正确赋值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
相关产品推荐
相关产品推荐

