Python Pandas 库入门:介绍与基本使用教程
在 Python 的数据分析生态中,Pandas 是最常用、最重要的库之一。无论你是做数据分析、自动化办公、机器学习前的数据清洗,还是处理 Excel、CSV、数据库导出的表格数据,Pandas 都是一个非常实用的工具。
这篇文章面向 Pandas 新手,目标是帮助你快速理解 Pandas 能做什么,并掌握最常见的基础用法。
1. Pandas 是什么
Pandas 是一个基于 Python 的数据分析和数据处理库,主要用于处理结构化数据。
简单理解,Pandas 可以把数据看成类似 Excel 表格的形式,然后用代码完成读取、筛选、统计、清洗、分组、合并、导出等操作。
Pandas 常见应用场景包括:
- 读取和处理 Excel、CSV 文件。
- 清洗脏数据,例如空值、重复值、异常值。
- 对数据进行筛选、排序、分组统计。
- 生成业务报表。
- 分析日志、订单、用户、商品、财务等数据。
- 为机器学习模型准备训练数据。
- 与 NumPy、Matplotlib、Scikit-learn 等库配合使用。
如果你经常处理表格数据,Pandas 能大幅提升效率。
2. 为什么要学习 Pandas
对于新手来说,Pandas 最直接的价值是:用代码批量处理表格数据,减少重复手工操作。
例如:
- 手动整理几十个 Excel 文件很麻烦,Pandas 可以自动合并。
- 手动筛选销售额大于某个值的数据很慢,Pandas 一行代码就能完成。
- 手动计算每个城市、每个商品类别的销售额容易出错,Pandas 可以快速分组统计。
- 手动删除重复数据、填充空值、转换日期格式效率低,Pandas 可以批量处理。
Pandas 特别适合下面几类人学习:
- Python 初学者。
- 数据分析入门者。
- 经常处理 Excel 的办公人员。
- 测试、运营、财务、产品、业务分析人员。
- 想学习机器学习和人工智能的人。
3. 安装 Pandas
如果你已经安装了 Python,可以使用 pip 安装 Pandas:
bash
pip install pandas
如果你使用的是 Anaconda,通常已经自带 Pandas,也可以使用下面命令安装:
bash
conda install pandas
安装完成后,在 Python 中导入 Pandas:
python
import pandas as pd
pd 是 Pandas 的常用别名,几乎所有 Pandas 教程都会这样写。
4. Pandas 的两个核心数据结构
Pandas 中最重要的两个数据结构是:
- Series:一维数据,类似一列数据。
- DataFrame:二维表格数据,类似 Excel 表。
4.1 Series
Series 可以理解为带索引的一列数据。
python
import pandas as pd
scores = pd.Series([90, 85, 78, 92])
print(scores)
输出结果类似:
text
0 90
1 85
2 78
3 92
dtype: int64
左边的 0、1、2、3 是索引,右边是具体数据。
也可以自定义索引:
python
scores = pd.Series([90, 85, 78, 92], index=["张三", "李四", "王五", "赵六"])
print(scores)
4.2 DataFrame
DataFrame 是 Pandas 中最常用的数据结构,可以理解为一张表。
python
import pandas as pd
data = {
"姓名": ["张三", "李四", "王五", "赵六"],
"年龄": [18, 20, 19, 21],
"城市": ["北京", "上海", "广州", "深圳"],
"成绩": [90, 85, 78, 92]
}
df = pd.DataFrame(data)
print(df)
输出结果:
text
姓名 年龄 城市 成绩
0 张三 18 北京 90
1 李四 20 上海 85
2 王五 19 广州 78
3 赵六 21 深圳 92
DataFrame 是学习 Pandas 的重点,后面大部分操作都围绕它展开。
5. 读取数据
Pandas 最常用的功能之一就是读取外部数据。
5.1 读取 CSV 文件
python
import pandas as pd
df = pd.read_csv("students.csv")
print(df)
如果 CSV 文件是中文编码,可能需要指定编码:
python
df = pd.read_csv("students.csv", encoding="utf-8")
如果遇到 Windows 下常见的 GBK 编码文件,可以写:
python
df = pd.read_csv("students.csv", encoding="gbk")
5.2 读取 Excel 文件
读取 Excel 文件需要安装 openpyxl:
bash
pip install openpyxl
读取 Excel:
python
df = pd.read_excel("students.xlsx")
print(df)
读取指定工作表:
python
df = pd.read_excel("students.xlsx", sheet_name="成绩表")
5.3 读取指定列
如果只想读取部分列,可以使用 usecols:
python
df = pd.read_excel("students.xlsx", usecols=["姓名", "年龄", "成绩"])
6. 查看数据基本信息
读取数据后,第一步通常是先观察数据。
6.1 查看前几行
python
print(df.head())
默认查看前 5 行,也可以指定行数:
python
print(df.head(10))
6.2 查看后几行
python
print(df.tail())
6.3 查看数据维度
python
print(df.shape)
返回结果是一个元组:
text
(行数, 列数)
6.4 查看列名
python
print(df.columns)
6.5 查看数据类型和缺失情况
python
print(df.info())
6.6 查看数值列统计信息
python
print(df.describe())
describe() 可以快速查看平均值、标准差、最小值、最大值、四分位数等统计信息。
7. 选择行和列
7.1 选择一列
python
names = df["姓名"]
print(names)
7.2 选择多列
python
result = df[["姓名", "成绩"]]
print(result)
注意:选择多列时,外面是两层中括号。
7.3 按行号选择数据
使用 iloc 按位置选择。
python
print(df.iloc[0])
选择前 3 行:
python
print(df.iloc[0:3])
选择第 1 行、第 2 列的数据:
python
print(df.iloc[0, 1])
7.4 按标签选择数据
使用 loc 按索引和列名选择。
python
print(df.loc[0, "姓名"])
选择指定行和列:
python
print(df.loc[0:2, ["姓名", "成绩"]])
8. 条件筛选
条件筛选是 Pandas 中非常常用的操作。
8.1 筛选成绩大于 85 的学生
python
result = df[df["成绩"] > 85]
print(result)
8.2 多条件筛选
筛选年龄大于 18 且成绩大于 85 的学生:
python
result = df[(df["年龄"] > 18) & (df["成绩"] > 85)]
print(result)
筛选城市是北京或上海的学生:
python
result = df[(df["城市"] == "北京") | (df["城市"] == "上海")]
print(result)
注意:
&表示并且。|表示或者。- 每个条件都要用小括号包起来。
8.3 使用 isin 筛选多个值
python
result = df[df["城市"].isin(["北京", "上海"])]
print(result)
9. 新增、修改和删除列
9.1 新增列
python
df["是否及格"] = df["成绩"] >= 60
print(df)
9.2 根据条件生成新列
python
df["等级"] = df["成绩"].apply(lambda x: "优秀" if x >= 90 else "普通")
print(df)
9.3 修改列数据
把所有成绩加 5 分:
python
df["成绩"] = df["成绩"] + 5
9.4 删除列
python
df = df.drop(columns=["是否及格"])
如果要删除多列:
python
df = df.drop(columns=["是否及格", "等级"])
10. 缺失值处理
真实数据中经常会有空值,Pandas 提供了很多处理方式。
10.1 判断缺失值
python
print(df.isnull())
统计每列缺失值数量:
python
print(df.isnull().sum())
10.2 删除缺失值
删除包含缺失值的行:
python
df_clean = df.dropna()
10.3 填充缺失值
用 0 填充:
python
df["成绩"] = df["成绩"].fillna(0)
用平均值填充:
python
avg_score = df["成绩"].mean()
df["成绩"] = df["成绩"].fillna(avg_score)
用固定文本填充:
python
df["城市"] = df["城市"].fillna("未知")
11. 重复值处理
11.1 判断重复行
python
print(df.duplicated())
11.2 删除重复行
python
df = df.drop_duplicates()
按照指定列判断重复:
python
df = df.drop_duplicates(subset=["姓名"])
12. 排序
12.1 按成绩升序排序
python
df_sorted = df.sort_values(by="成绩")
print(df_sorted)
12.2 按成绩降序排序
python
df_sorted = df.sort_values(by="成绩", ascending=False)
print(df_sorted)
12.3 多列排序
先按城市排序,再按成绩降序排序:
python
df_sorted = df.sort_values(by=["城市", "成绩"], ascending=[True, False])
print(df_sorted)
13. 分组统计
分组统计是 Pandas 的核心能力之一,类似 SQL 中的 group by。
假设有一张销售表:
python
import pandas as pd
data = {
"城市": ["北京", "北京", "上海", "上海", "广州"],
"商品": ["电脑", "手机", "电脑", "手机", "电脑"],
"销售额": [10000, 8000, 12000, 9000, 7000]
}
df = pd.DataFrame(data)
13.1 按城市统计销售额
python
result = df.groupby("城市")["销售额"].sum()
print(result)
13.2 按城市统计平均销售额
python
result = df.groupby("城市")["销售额"].mean()
print(result)
13.3 多个统计指标
python
result = df.groupby("城市")["销售额"].agg(["sum", "mean", "max", "min"])
print(result)
13.4 按多个字段分组
python
result = df.groupby(["城市", "商品"])["销售额"].sum()
print(result)
14. 数据合并
Pandas 可以像数据库一样合并不同表格。
14.1 concat 纵向合并
如果两个表结构相同,可以上下拼接:
python
df_all = pd.concat([df1, df2], ignore_index=True)
适合合并多个 Excel 或 CSV 文件。
14.2 merge 横向关联
如果两个表有共同字段,可以按字段关联。
python
orders = pd.DataFrame({
"用户ID": [1, 2, 3],
"订单金额": [100, 200, 300]
})
users = pd.DataFrame({
"用户ID": [1, 2, 3],
"姓名": ["张三", "李四", "王五"]
})
result = pd.merge(orders, users, on="用户ID", how="left")
print(result)
how 常用取值:
left:保留左表全部数据。right:保留右表全部数据。inner:只保留两边都匹配的数据。outer:保留两边所有数据。
15. 数据导出
处理完数据后,通常需要导出结果。
15.1 导出 CSV
python
df.to_csv("result.csv", index=False, encoding="utf-8-sig")
index=False 表示不导出索引列。
encoding="utf-8-sig" 可以让 Excel 更好地识别中文。
15.2 导出 Excel
python
df.to_excel("result.xlsx", index=False)
如果要导出多个工作表:
python
with pd.ExcelWriter("report.xlsx") as writer:
df.to_excel(writer, sheet_name="原始数据", index=False)
df_sorted.to_excel(writer, sheet_name="排序结果", index=False)
16. 一个完整入门案例:统计每个城市的销售额
下面用一个完整小案例串联 Pandas 的基本操作。
python
import pandas as pd
# 1. 构造示例数据
data = {
"订单号": ["A001", "A002", "A003", "A004", "A005"],
"城市": ["北京", "上海", "北京", "广州", "上海"],
"商品": ["电脑", "手机", "键盘", "电脑", "鼠标"],
"销售额": [10000, 5000, 800, 7000, 200],
"销售员": ["张三", "李四", "张三", "王五", "李四"]
}
df = pd.DataFrame(data)
# 2. 查看数据
print(df.head())
print(df.info())
# 3. 筛选销售额大于 1000 的订单
big_orders = df[df["销售额"] > 1000]
# 4. 按城市统计销售额
city_sales = big_orders.groupby("城市")["销售额"].sum().reset_index()
# 5. 按销售额降序排序
city_sales = city_sales.sort_values(by="销售额", ascending=False)
# 6. 导出结果
city_sales.to_excel("城市销售额统计.xlsx", index=False)
print(city_sales)
这个案例完成了:
- 创建表格数据。
- 查看数据。
- 条件筛选。
- 分组汇总。
- 排序。
- 导出 Excel。
这就是 Pandas 在实际工作中最常见的使用方式。
17. 新手常见问题
17.1 DataFrame 和 Excel 有什么区别
DataFrame 可以理解为代码中的 Excel 表格,但它更适合自动化处理。Excel 更适合手动查看和编辑,Pandas 更适合批量处理和重复执行。
17.2 loc 和 iloc 怎么区分
简单记忆:
loc按标签选择,例如列名、索引名。iloc按位置选择,例如第几行、第几列。
示例:
python
df.loc[0, "姓名"]
df.iloc[0, 1]
17.3 为什么选择多列要写两层中括号
python
df[["姓名", "成绩"]]
外层中括号表示从 DataFrame 中取数据,内层列表表示要取的多个列名。
17.4 为什么修改数据后要重新赋值
很多 Pandas 操作默认不会直接修改原数据,而是返回一个新的 DataFrame。
例如:
python
df = df.drop_duplicates()
这样写可以明确把处理后的结果保存回 df。
18. Pandas 入门学习路线
新手学习 Pandas,可以按下面顺序推进:
- 学会创建 DataFrame 和 Series。
- 学会读取 CSV、Excel 文件。
- 学会查看数据基本信息。
- 学会选择行和列。
- 学会条件筛选。
- 学会处理缺失值和重复值。
- 学会排序、统计、分组聚合。
- 学会合并多个表格。
- 学会导出 CSV 和 Excel。
- 用真实业务数据做一个小项目。
推荐从 Excel 或 CSV 文件入手,因为这类数据最直观,也最容易看到 Pandas 的效果。
19. 总结
Pandas 是 Python 数据分析和表格处理的核心库。它可以帮助我们高效完成数据读取、清洗、筛选、统计、分组、合并和导出等工作。
对于新手来说,学习 Pandas 不需要一开始记住所有函数,先掌握下面这些高频操作就足够入门:
pd.read_csv():读取 CSV。pd.read_excel():读取 Excel。df.head():查看前几行。df.info():查看数据结构。df["列名"]:选择列。df[df["列名"] > 条件]:条件筛选。df.groupby():分组统计。df.sort_values():排序。df.dropna():处理缺失值。df.drop_duplicates():删除重复值。df.to_excel():导出 Excel。
Pandas 的学习重点不在于死记函数,而在于多练习真实数据处理场景。只要能熟练完成"读取数据、清洗数据、分析数据、导出结果"这条流程,就已经具备了 Pandas 的基础实战能力。