寻求在 Pandas 中处理大型 CSV 文件的有效方法

问题描述 投票:0回答:1

我面临着一个涉及处理 CSV 文件的 Python 项目的挑战,其中一些文件非常大(1-5 GB)。我开发的脚本可以很好地处理较小的文件,但无法处理这些较大的数据集,经常遇到速度瓶颈和内存问题。

工作流程主要包括将这些 CSV 文件加载到 DataFrame 中,进行标准数据清理(如重复删除和缺失值处理),然后进行复杂的数据转换和聚合。

我非常感谢有关以下方面的一些指导:

以块的形式读取和处理大型 CSV 文件的策略,同时仍然能够执行全面的数据集操作。 优化内存管理并防止脚本在大文件负载下崩溃的方法。 在 Pandas 中管理大型数据集以增强脚本性能的一般最佳实践或技巧。 任何有关有用资源的建议或指示都会非常有帮助!

在尝试解决这个问题时,我尝试了几种方法:

读取整个文件:最初,我使用 pandas.read_csv() 将整个 CSV 加载到 DataFrame 中。我原以为这很简单,但对于大于 1GB 的文件,它会导致处理时间过长,在某些情况下还会导致内存错误。

对文件进行分块:接下来,我尝试使用 pandas.read_csv() 中的 chunksize 参数分块读取文件。这改善了内存使用情况,但在有效应用需要数据集整体视图的操作(例如排序或复杂的分组操作)时,我面临着挑战。

优化数据类型:我还尝试通过转换数据类型来优化内存,例如,对具有有限唯一值的字符串使用类别类型。这对内存使用产生了积极影响,但并没有显着改善整体处理时间。

我期待的是 CSV 文件的顺利处理,无论其大小如何,并具有合理的内存使用和处理时间。然而,现实要么遇到内存错误,要么面临不切实际的处理持续时间。我正在寻找一种平衡的方法,在有效处理大型数据集的同时不会对性能造成太大影响。

python pandas
1个回答
0
投票

您应该尝试使用

pd.read_csv
chunksize 参数按块进行处理,例如这样:

import pandas as pd

# Adjust the parameter based on your memory constraints
chunksize = 10 ** 5 

# Initialize an empty DataFrame to store the results
store = pd.DataFrame()

# Loop through the chunks
for chunk in pd.read_csv('large_file.csv', chunksize=chunksize):
    # Drop duplicates to ligthen dataframe
    chunk = chunk.drop_duplicates()
    # Append the processed chunk to the store DataFrame
    store = store.append(chunk)

# Drop duplicates to ligthen the final store dataframe
store = store.drop_duplicates()
© www.soinside.com 2019 - 2024. All rights reserved.