【Python系列课程】Pandas(六):数据读写——CSV与Excel文件操作

📊 阅读时长:16分钟 | 关键词:Pandas、read_csv、to_csv、read_excel、to_excel、文件读写

引言

数据不会凭空存在。学完了 Series、DataFrame、groupby 这些核心操作后,你必须能把数据"读进来"和"写出去"------从 CSV/Excel 文件中加载数据开始分析,分析完成后把结果保存下来交给别人。这篇就是 Pandas 的"最后一公里"。

一、CSV 文件读取(read_csv)

CSV(逗号分隔值)是最通用的数据交换格式,pd.read_csv() 是它的入口。

1.1 基础用法
python 复制代码
import pandas as pd

# 最简用法:直接读取
df = pd.read_csv('./test01.csv')
print(df)
1.2 分隔符参数 sep
python 复制代码
# 默认分隔符是逗号,如果文件用分号分隔,需要指定
df = pd.read_csv('./test02.csv', sep=';')
print(df)
1.3 表头参数 header
python 复制代码
# header 默认推断,第一行作为列索引(表头)
# 如果不想用第一行当表头,设为 None
df = pd.read_csv('./test03.csv', sep=';', header=None)
print(df)

# header=2 指定第 3 行作为表头(从 0 开始数)
df = pd.read_csv('./test03.csv', sep=';', header=2)
print(df)
1.4 自定义列名 names
python 复制代码
# 用 names 参数指定列名,此时 header 自动推断为 None
df = pd.read_csv('./test02.csv', sep=';', names=['name', 'age', 'height'])
print(df)
1.5 读取大文件片段
python 复制代码
# nrows 只读取前 N 行(header 先推断,再读取)
df = pd.read_csv('./test01.csv', nrows=2)
print(df)
1.6 跳过行 skiprows
python 复制代码
# skiprows 为整数时,跳过前 N 行
df = pd.read_csv('./test01.csv', skiprows=2)
print(df)

# skiprows 为列表时,跳过指定索引行(0 开始)
df = pd.read_csv('./test01.csv', skiprows=[0, 2])
print(df)
1.7 指定列 usecols
python 复制代码
# 只读取第 1 列和第 3 列(索引从 0 开始)
df = pd.read_csv('./test01.csv', usecols=[0, 2])
print(df)
1.8 分块读取 chunksize

大文件一次读不完?分块迭代:

python 复制代码
# chunksize 指定每次读取的行数,返回 TextFileReader 迭代器
obj = pd.read_csv('./test01.csv', chunksize=2)
for chunk in obj:
    print(chunk)

read_csv 参数速查

参数 说明 示例
sep 分隔符,默认逗号 sep=';'
header 表头行号(None = 无表头) header=0 / header=None
names 自定义列名列表 names=['A','B','C']
nrows 只读取前 N 行 nrows=100
skiprows 跳过指定行 skiprows=2 / skiprows=[0,2]
usecols 只读取指定列 usecols=[0, 2]
chunksize 分块读取行数 chunksize=1000

二、CSV 文件写入(to_csv)

python 复制代码
d = {
    '名字': ['张三', '李四', '王五', '赵六', '孙七'],
    '年龄': [18, 19, 20, 22, 17],
    '身高': [188, 178, 189, 175, 177]
}
df = pd.DataFrame(data=d)
print(df)
复制代码
  名字  年龄   身高
0  张三   18  188
1  李四   19  178
2  王五   20  189
3  赵六   22  175
4  孙七   17  177
python 复制代码
# 最简写入(默认逗号分隔,写入行索引和列索引)
df.to_csv('./test04.csv')

# 自定义分隔符
df.to_csv('./test05.csv', sep=';')

# 不写入行索引
df.to_csv('./test06.csv', index=False)

# 不写入列索引(表头)
df.to_csv('./test07.csv', header=False)

to_csv 参数速查

参数 说明 默认值
sep 分隔符 ','
index 是否写入行索引 True
header 是否写入列索引(表头) True

三、Excel 文件写入(to_excel)

3.1 基础写入
python 复制代码
# 写入单个工作表
df.to_excel('./test08.xlsx')

# 不写入行索引
df.to_excel('./test09.xlsx', index=False)

# 不写入列索引(表头)
df.to_excel('./test10.xlsx', header=False)
3.2 写入多个工作表
python 复制代码
# 方法一:用 ExcelWriter(记得 close)
writer = pd.ExcelWriter('./test11.xlsx')
df.to_excel(writer, sheet_name='工作表1', index=False)
df.iloc[:, :2].to_excel(writer, sheet_name='工作表2', index=False)  # 只写前两列
writer.close()

# 方法二:with 语句更优雅(推荐)
with pd.ExcelWriter('./test11.xlsx') as writer:
    df.to_excel(writer, sheet_name='工作表1', index=False)
    df.iloc[:, :2].to_excel(writer, sheet_name='工作表2', index=False)

四、Excel 文件读取(read_excel)

4.1 基础与表头
python 复制代码
# header 默认为 0,第一行作为表头
df = pd.read_excel('./test11.xlsx')
print(df)

# header=None,不用第一行当表头
df = pd.read_excel('./test11.xlsx', header=None)
print(df)

# header=2,第 3 行当表头
df = pd.read_excel('./test11.xlsx', header=2)
print(df)
4.2 自定义列名
python 复制代码
# 指定 names 会覆盖原有表头(header 默认 0 时)
df = pd.read_excel('./test11.xlsx', names=['name', 'age', 'height'])
print(df)

# header=None + names:第一行仍当数据
df = pd.read_excel('./test11.xlsx', header=None, names=['name', 'age', 'height'])
print(df)
4.3 选择工作表 sheet_name
python 复制代码
# 整数索引(默认 0 读第一个工作表)
df = pd.read_excel('./test11.xlsx', sheet_name=1)
print(df)

# 字符串名称
df = pd.read_excel('./test11.xlsx', sheet_name='工作表2')
print(df)

# 读取多个工作表:返回 dict,key 是工作表名
df = pd.read_excel('./test11.xlsx', sheet_name=[0, '工作表2'])
print(df)
4.4 读取大文件片段
python 复制代码
df = pd.read_excel('./test11.xlsx', nrows=2)
print(df)

df = pd.read_excel('./test11.xlsx', skiprows=2)
print(df)

df = pd.read_excel('./test11.xlsx', skiprows=[0, 2])
print(df)

df = pd.read_excel('./test11.xlsx', usecols=[0, 2])
print(df)

read_excel 参数速查

参数 说明 示例
header 表头行号 header=0(默认)/ header=None
names 自定义列名 names=['A','B']
sheet_name 工作表索引或名称 sheet_name=0 / sheet_name='Sheet1' / sheet_name=[0, 'Sheet2']
nrows 只读取前 N 行 nrows=100
skiprows 跳过指定行 skiprows=2
usecols 只读取指定列 usecols=[0, 2]

五、CSV vs Excel:何时用哪个?

CSV Excel
文件大小 更小 更大
读取速度 更快 较慢
多工作表 ❌ 不支持 ✅ 支持
人类可读 纯文本,记事本可看 需 Office/WPS
通用性 几乎所有工具都支持 主要 Office 系列
推荐场景 数据交换、大数据、API 导出 报告、多 sheet 结构化文件

💡 经验法则:数据分析流程中首选 CSV (轻量快速),最终交付给非技术人员时用 Excel(带格式多 sheet 好看)。

小结

操作
CSV pd.read_csv(file, sep=',') df.to_csv(file, index=False)
Excel pd.read_excel(file, sheet_name=0) df.to_excel(writer, sheet_name='xxx')

文件读写是数据分析的"入口"和"出口"。入口把数据加载为 DataFrame,出口把分析结果保存交付。至此,Pandas 六大模块全部完成。


本文是「Python从入门到数据分析」系列的第 18 篇。Pandas 系列完结 🎉 下一站:Matplotlib 数据可视化。

📚 Pandas 系列回顾

(一)Series 与 DataFrame 详解 → (二)数据清洗与缺失值处理 → (三)拼接合并与索引操作 → (四)数据统计与排序 → (五)分组聚合与函数应用 → (六)CSV 与 Excel 文件读写

相关推荐
weixin_407443872 小时前
OCR材料信息提取工具(附件中含代码和数据)
人工智能·python·计算机视觉·ocr
码农阿强2 小时前
PixVerse 全系列视频生成模型技术架构详解 + Python 基于 StartAPI.top 接口实战调用
python·ai·架构·音视频·ai编程
Smilecoc2 小时前
风控评分卡模型原理与应用(四):WOE编码的单调性
python
许彰午2 小时前
04_Java数组操作全解
java·开发语言·python
废弃的小码农2 小时前
APP测试--adb使用介绍
python·测试工具·adb
曲幽2 小时前
你的FastAPI又在服务器上“跑不起来”了?来,今天咱把打包这件事彻底聊透
linux·windows·python·docker·fastapi·web·pyinstaller·nssm·services
AI玫瑰助手2 小时前
Python函数:局部变量与全局变量的作用域
开发语言·python·信息可视化
imDwAaY2 小时前
机器学习入门:从感知机到逻辑回归,理解线性分类器与Softmax CS188 Note20 学习笔记
人工智能·笔记·python·学习·机器学习·逻辑回归
2601_961194022 小时前
2026初级会计实务教材电子版|章节讲义+习题PDF
python·考研·django·pdf·virtualenv·pygame