Python 数据处理:Pandas 读取 CSV 文件
Pandas 是 Python 中处理数据的核心库,而 read_csv 是其最常用的功能。无论是分析销售数据、处理日志文件,还是读取实验记录,掌握它能帮你快速将文本转化为可操作的数据结构。
1. 准备工作
在开始读取文件之前,需要确保环境已就绪。
-
打开 终端或命令行工具(CMD、PowerShell 或 Terminal)。
-
输入 安装命令并 按下 回车键:
pip install pandas -
创建一个名为
data.csv的测试文件,用于后续练习。你可以使用记事本或代码编辑器,输入 以下内容并 保存:ID,Name,Age,Salary,Join_Date 101,Alice,28,70000,2023-01-15 102,Bob,34,85000,2022-11-01 103,Charlie,29,72000,2023-03-20
2. 基础读取操作
最简单的读取方式只需一行代码。
- 启动 Python 交互环境或 创建 一个新的
.py脚本文件。 - 导入 Pandas 库:
import pandas as pd - 调用
read_csv函数 加载 文件:df = pd.read_csv('data.csv') - 打印 数据内容 查看 结果:
print(df)此步骤将输出一个表格形式的数据结构,默认第一行会被识别为列名。
3. 处理常见乱码问题
读取文件时,如果包含中文字符,经常会遇到 UnicodeDecodeError 或显示乱码。这是因为文件编码与 Python 默认读取编码(通常是 UTF-8)不匹配。
- 尝试 指定
encoding参数为gbk:df = pd.read_csv('data.csv', encoding='gbk') - 检查 输出是否正常。如果
gbk无效,尝试 替换为gb18030或utf-8-sig。
针对编码错误的排查流程,请参考以下逻辑:
graph TD
A["开始: 尝试读取文件"] --> B{是否报错?}
B -- "否" --> C["成功加载数据"]
B -- "是 / 乱码" --> D["尝试 encoding='gbk'"]
D --> E{是否解决?}
E -- "是" --> C
E -- "否" --> F["尝试 encoding='gb18030'"]
F --> G{是否解决?}
G -- "是" --> C
G -- "否" --> H["尝试 encoding='utf-8-sig'"]
H --> I{是否解决?}
I -- "是" --> C
I -- "否" --> J["检查文件原始编码格式"]
4. 处理分隔符与表头
并非所有 CSV 文件都使用逗号分隔,也并非所有文件都有表头。
场景一:使用非逗号分隔
某些 CSV 文件使用分号 ; 或制表符(Tab)分隔。
- 使用
sep或delimiter参数 指定 分隔符。 - 输入 以下代码读取分号分隔的文件:
df = pd.read_csv('data.csv', sep=';')
场景二:文件没有表头
如果文件的第一行就是数据,而不是列名。
- 设置
header参数为None:df = pd.read_csv('data.csv', header=None) - 此时,Pandas 会自动生成数字索引(0, 1, 2...)作为列名。
场景三:自定义列名
- 传入
names参数 覆盖 原有列名:df = pd.read_csv('data.csv', names=['编号', '姓名', '年龄', '薪资', '入职日期'])
5. 数据筛选与类型优化
为了提高处理效率,读取时可以只加载需要的列或指定数据类型。
只读取特定列
如果文件有几百列,但你只需要两列。
- 使用
usecols参数 传入 列名列表:df = pd.read_csv('data.csv', usecols=['Name', 'Salary'])
自动转换日期格式
默认情况下,日期会被读取为字符串。为了方便后续计算时间差。
- 设置
parse_dates参数为True或 指定 列名:df = pd.read_csv('data.csv', parse_dates=['Join_Date']) - 查看 列的数据类型,
Join_Date列将变成datetime64[ns]类型。
6. 处理超大文件
当 CSV 文件大小超过内存容量(例如几 GB 或几十 GB)时,一次性读取会导致电脑卡死。
方法一:分块读取
- 设置
chunksize参数 指定 每块的行数:chunk_iter = pd.read_csv('big_data.csv', chunksize=10000) - 使用
for循环 逐块处理 数据:for chunk in chunk_iter: # 在这里对每一块数据进行处理,例如筛选或聚合 result = chunk[chunk['Age'] > 30] print(result.shape)
7. 常用参数速查表
以下是 pd.read_csv 最常用的参数汇总,便于查阅。
| 参数名称 | 功能描述 | 示例值 |
|---|---|---|
filepath_or_buffer |
文件路径或 URL | 'data.csv' 或 'https://example.com/data.csv' |
sep |
分隔符,默认为逗号 | ';' 或 '\t' |
header |
指定哪一行作为表头 | 0 (第一行) 或 None (无表头) |
names |
自定义列名列表 | ['列A', '列B', '列C'] |
index_col |
指定某一列作为行索引 | 'ID' 或 0 |
encoding |
文件编码格式 | 'utf-8' 或 'gbk' |
usecols |
只读取指定的列 | ['Name', 'Age'] |
parse_dates |
尝试解析为日期 | ['Date'] 或 True |
chunksize |
分块读取的行数 | 10000 |

暂无评论,快来抢沙发吧!