绕过Pandas的内存限制
Pandas是一个用于分析和处理数据集的Python库,但Pandas的一个主要缺点是在处理大型数据集时的内存限制问题,因为Pandas DataFrames(二维数据结构)是保存在内存中的,所以一次可以处理多少数据是有限制的。
在Pandas中处理大量的数据需要采用以下方法之一。
方法1:分块加载数据
pandas.read_csv()有一个叫chunksize的参数,用于分块加载数据。参数chunksize是Pandas在一个文件中一次读取的行数。它返回一个迭代器TextFileReader,需要通过迭代来获取数据。
语法:
pd.read_csv(‘file_name’, chunksize= size_of_chunk)
示例:
import pandas as pd
data = pd.read_csv('train dataset.csv', chunksize=100)
for x in data:
print(x.shape[0])
输出:
方法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)
输出 :
方法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())
输出 :
方法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
输出:
方法5:删除未使用的对象
在清理/预处理数据时,会创建许多临时的数据框架和对象,这些对象在使用后应该被删除,以便减少内存的使用。python中的del关键字主要用于删除Python中的对象。
语法:
del object_name
示例 :
import pandas as pd
data = pd.read_csv('train_dataset.csv')
del data