乐闻世界logo
搜索文章和话题

How do I read a large csv file with pandas?

4 个月前提问
4 个月前修改
浏览次数29

1个答案

1

在Pandas中,读取大型CSV文件有多种方法可以有效地管理内存使用,同时确保处理速度。以下是一些常用的策略和方法:

1. 使用 read_csv 的参数

分块读取

当处理非常大的文件时,可以使用 chunksize 参数来分块读取文件。这允许你每次只处理一个小部分数据,而不是一次性将整个文件加载到内存中。

python
import pandas as pd chunk_size = 10000 # 每块的行数 chunks = pd.read_csv('large_file.csv', chunksize=chunk_size) for chunk in chunks: # 对每个chunk进行处理 process(chunk)

只读取部分列

如果你只关心文件中的特定几列,使用 usecols 参数可以显著减少内存消耗。

python
columns = ['col1', 'col2', 'col3'] # 只需要读取的列名 df = pd.read_csv('large_file.csv', usecols=columns)

2. 数据类型优化

在读取时直接指定更加节约内存的数据类型可以减少内存使用。例如,如果知道数据范围较小,可以使用 int32float32 而不是默认的 int64float64

python
dtypes = {'col1': 'int32', 'col2': 'float32', 'col3': 'category'} df = pd.read_csv('large_file.csv', dtype=dtypes)

3. 逐行读取

虽然这种方法处理起来可能比较慢,但它可以帮助你控制内存使用,尤其是在初步检查数据结构或处理极大文件时很有用。

python
with open('large_file.csv') as file: for line in file: process(line)

4. 使用 Dask 或其他库

对于非常大的数据集,Pandas可能不是最优选。可以考虑使用如Dask这样的库,它设计用于并行计算,能够更有效地处理大规模数据。

python
import dask.dataframe as dd df = dd.read_csv('large_file.csv')

示例应用场景

假设你在一个电商公司工作,需要处理一个包含数百万订单的大型CSV文件。每个订单包含多个属性,但你只关心订单ID、用户ID和订单金额。你可以使用 read_csv,结合 usecolsdtype,来优化读取过程:

python
columns = ['OrderID', 'UserID', 'Amount'] dtypes = {'OrderID': 'int32', 'UserID': 'int32', 'Amount': 'float32'} df = pd.read_csv('orders.csv', usecols=columns, dtype=dtypes)

这种方法将显著降低内存使用并提高处理速度。

2024年7月20日 14:46 回复

你的答案