2025年12月07日/ 浏览 20
正文:
在数据分析和处理中,CSV(逗号分隔值)文件因其简单易用的特性成为最常见的格式之一。Python凭借强大的生态库(如pandas)成为处理CSV的首选工具。本文将系统介绍如何用pandas高效读写CSV文件,并提供优化方案以应对大规模数据集。
pandas提供了read_csv()和to_csv()两个核心函数,支持从CSV加载数据或将数据保存为CSV格式。
python
import pandas as pd
df = pd.read_csv(‘data.csv’)
df = pd.read_csv(‘data.csv’, header=0, names=[‘col1’, ‘col2’])
参数说明:
– header:指定标题行位置(默认0)。
– names:自定义列名。
– skiprows:跳过指定行数。
python
df.to_csv('output.csv', index=False, encoding='utf-8')
关键参数:
– index=False:避免保存行索引。
– encoding:指定文件编码(如处理中文需utf-8)。
当处理GB级CSV文件时,默认方法可能效率低下。以下是5个优化方案:
通过分块加载减少内存压力:
python
chunksize = 10000
chunks = pd.readcsv(‘largedata.csv’, chunksize=chunksize)
for chunk in chunks:
process(chunk) # 自定义处理函数
显式定义dtypes可加速读取并节省内存:
python
dtypes = {'id': 'int32', 'price': 'float32'}
df = pd.read_csv('data.csv', dtype=dtypes)
engine='c'(默认C引擎)比engine='python'更快,但后者兼容性更强。
通过usecols仅加载必要列:
python
df = pd.read_csv('data.csv', usecols=['col1', 'col2'])
结合Dask或modin.pandas实现并行化:
python
import dask.dataframe as dd
ddf = dd.read_csv('large_data.csv')
假设需分析百万级订单数据,优化后的代码如下:
python
chunks = pd.readcsv(
‘orders.csv’,
chunksize=50000,
usecols=[‘orderid’, ‘totalprice’, ‘date’],
parsedates=[‘date’]
)
monthlysales = []
for chunk in chunks:
chunk[‘month’] = chunk[‘date’].dt.month
monthlysales.append(chunk.groupby(‘month’)[‘total_price’].sum())
result = pd.concat(monthly_sales).groupby(level=0).sum()
encoding='gbk'或utf-8-sig。 na_values参数指定缺失值标识符。 parse_dates自动转换日期列。