绕过Pandas的内存限制

绕过Pandas的内存限制

Pandas是一个用于分析和处理数据集的Python库,但Pandas的一个主要缺点是在处理大型数据集时的内存限制问题,因为Pandas DataFrames(二维数据结构)是保存在内存中的,所以一次可以处理多少数据是有限制的。

绕过Pandas的内存限制

在Pandas中处理大量的数据需要采用以下方法之一。

方法1:分块加载数据

pandas.read_csv()有一个叫chunksize的参数,用于分块加载数据。参数chunksize是Pandas在一个文件中一次读取的行数。它返回一个迭代器TextFileReader,需要通过迭代来获取数据。

语法:

pd.read_csv(file_name, chunksize= size_of_chunk)
Python

示例:

import pandas as pd
  
data = pd.read_csv('train dataset.csv', chunksize=100)
  
for x in data:
    print(x.shape[0])
Python

输出:

绕过Pandas的内存限制

方法2:过滤出有用的数据

大型数据集有许多列/特征,但只有其中一些是实际使用的。因此,为了节省更多的数据操作和计算的时间,只加载有用的列。

语法:

dataframe = dataframe[[‘column_1’, ‘column_2’, ‘column_3’, ‘column_4’, ‘column_5’]]

示例 :

import pandas as pd
  
data=pd.read_csv('train_dataset.csv')
  
data = data[['Gender', 'Age', 'openness', 'neuroticism',
             'conscientiousness', 'agreeableness', 'extraversion']]
  
display(data)
Python

输出 :

绕过Pandas的内存限制

方法3:为列指定dtypes

默认情况下,pandas为所有的数字值指定了int64范围(这是最大的可用dtype)。但是如果数字列中的数值小于int64范围,那么可以使用容量较小的dtype来防止额外的内存分配,因为较大的dtype会使用更多的内存。

语法:

dataframe =pd.read_csv(‘file_name’,dtype={‘col_1’:‘dtype_value’,‘col_2’:‘dtype_value’})

示例 :

import pandas as pd
  
data = pd.read_csv('train_dataset.csv', dtype={'Age': 'int32'})
  
print(data.info())
Python

输出 :

绕过Pandas的内存限制

方法4:稀疏的数据结构

Pandas Dataframe可以被转换为稀疏Dataframe,这意味着任何与特定值相匹配的数据在表示中被省略。稀疏的DataFrame允许更有效的存储。

语法:

dataframe = dataFrame.to_sparse(fill_value=None, kind=’block’)

由于上述数据集中没有空值,让我们创建带有一些空值的数据框架,并将其转换为稀疏数据框架。

示例 :

import pandas as pd
import numpy as np
  
df = pd.DataFrame(np.random.randn(10000, 4))
df.iloc[:9998] = np.nan
  
sdf = df.astype(pd.SparseDtype("float", np.nan))
  
sdf.head()
  
sdf.dtypes
Python

输出:

绕过Pandas的内存限制

方法5:删除未使用的对象

在清理/预处理数据时,会创建许多临时的数据框架和对象,这些对象在使用后应该被删除,以便减少内存的使用。python中的del关键字主要用于删除Python中的对象。

语法:

del object_name

示例 :

import pandas as pd
  
data = pd.read_csv('train_dataset.csv')
  
del data
Python

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册