【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 文件读写

相关推荐
小oo呆1 天前
【学习心得】Python多线程
python
happylifetree1 天前
Python70:核心语法-函数进阶-案例2
python
王中阳Go1 天前
两个入口答案不一致先别调模型:6 行入口口径对账表(附脚本)
人工智能·后端·python·大语言模型·1024程序员节
BK贝壳1 天前
bool-hybrid-array 落盘我只认 .bha:用 Create_BHA / Ask_BHA 做布尔数组序列化
数据结构·python·numpy·1024程序员节
Sakura_j_h_1 天前
Python 在定时任务里输出 emoji,UnicodeEncodeError 从哪来
开发语言·字符编码·windows·python·定时任务
supabc1231 天前
欧盟电子发票(XRechnung/Peppol/ZUGFeRD)踩坑记:用 Python 不装 Java 跑官方校验规则
xml·python·开源·电子发票·1024程序员节
ZhengEnCi1 天前
AI Agent工具调用防护层怎么写-一份能直接跑的Python四层拦截实现
python·llm·agent
ZhengEnCi1 天前
AI Agent工具误调用怎么解决-从参数校验到高危二次确认的四层工程防线
python·llm·agent
烂蜻蜓1 天前
Pandas入门教程(十三):Parquet 与 Feather——高性能列式存储格式实战
pandas
镜子AI1 天前
镜子AI工程教程:用Python实现关键词布局检查器与语义改写查重(附完整代码)
人工智能·python·microsoft