原文:
www.kdnuggets.com/how-to-perform-memory-efficient-operations-on-large-datasets-with-pandas
图片由编辑提供 | Midjourney
让我们学习如何在 Pandas 中对大型数据集进行操作。
1. Google 网络安全证书 - 快速进入网络安全职业生涯。
2. Google 数据分析专业证书 - 提升你的数据分析技能
3. Google IT 支持专业证书 - 支持你所在组织的 IT 工作
由于我们正在讨论 Pandas 包,你应该已经安装了它。此外,我们还会使用 Numpy 包。所以,请同时安装这两个包。
pip install pandas numpy
然后,让我们进入教程的核心部分。
Pandas 通常不以处理大型数据集而闻名,因为 Pandas 包的内存密集型操作可能会耗费大量时间甚至占满整个 RAM。然而,有一些方法可以提高 Pandas 操作的效率。
在本教程中,我们将向你展示如何提升在 Pandas 中处理大型数据集的体验。
首先,尝试使用内存优化参数加载数据集。还要尝试更改数据类型,尤其是更改为内存友好的类型,并删除任何不必要的列。
import pandas as pd
df = pd.read_csv('some_large_dataset.csv', low_memory=True, dtype={'column': 'int32'}, usecols=['col1', 'col2'])
将整数和浮点数转换为最小类型可以帮助减少内存占用。将具有少量唯一值的类别列转换为类别类型也有帮助。更小的列也有助于提高内存效率。
接下来,我们可以使用分块处理来避免使用全部内存。如果迭代处理会更高效。例如,我们想要计算列的均值,但数据集太大了。我们可以每次处理 100,000 条数据,最后得到总结果。
chunk_results = []
def column_mean(chunk):
chunk_mean = chunk['target_column'].mean()
return chunk_mean
chunksize = 100000
for chunk in pd.read_csv('some_large_dataset.csv', chunksize=chunksize):
chunk_results.append(column_mean(chunk))
final_result = sum(chunk_results) / len(chunk_results)
此外,避免使用带有 lambda 函数的 apply 方法,因为这可能会占用大量内存。更好的做法是使用矢量化操作或带有普通函数的.apply
方法。
df['new_column'] = df['existing_column'] * 2
对于 Pandas 中的条件操作,使用np.where
通常比直接使用带有.apply
的 Lambda 函数要快。
import numpy as np
df['new_column'] = np.where(df['existing_column'] > 0, 1, 0)
然后,在许多 Pandas 操作中使用inplace=True
比将其分配回 DataFrame 要节省更多内存。这种方法更高效,因为将其分配回 DataFrame 会在将它们放回同一个变量之前创建一个单独的 DataFrame。
df.drop(columns=['column_to_drop'], inplace=True)
最后,如果可能的话,尽早筛选数据。这将限制我们处理的数据量。
df = df[df['filter_column'] > threshold]
尝试掌握这些技巧以改善你在大型数据集中的 Pandas 使用体验。
Cornellius Yudha Wijaya**** 是一名数据科学助理经理和数据撰稿人。在全职工作于 Allianz Indonesia 的同时,他喜欢通过社交媒体和写作分享 Python 和数据技巧。Cornellius 在多个人工智能和机器学习主题上撰写文章。