Pandas 教程(保姆级教程)
💡一则或许对你有用的小广告
欢迎加入小哈的星球 ,你将获得:专属的项目实战(已更新的所有项目都能学习) / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论
- 新开坑项目:《Spring AI 项目实战》 正在持续爆肝中,基于 Spring AI + Spring Boot 3.x + JDK 21..., 点击查看 ;
- 《从零手撸:仿小红书(微服务架构)》 已完结,基于
Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...
,点击查看项目介绍 ;演示链接: http://116.62.199.48:7070 ;- 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;
截止目前, 星球 内专栏累计输出 90w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 3100+ 小伙伴加入学习 ,欢迎点击围观
前言
在数据分析与处理领域,Pandas 是 Python 生态中最强大的工具之一。它以简洁高效的语法,为开发者提供了处理表格数据(如 Excel、CSV 文件)的完整解决方案。无论是编程初学者还是中级开发者,掌握 Pandas 的核心功能都能显著提升工作效率。本文将通过循序渐进的方式,从基础概念到实战案例,系统讲解 Pandas 的使用方法,帮助读者快速上手这一工具。
安装与环境配置
安装方法
使用以下命令即可安装 Pandas:
pip install pandas
此外,建议同时安装 numpy
(Pandas 的底层依赖)和 matplotlib
(用于数据可视化)。
核心数据结构
Pandas 的核心是两个数据结构:Series 和 DataFrame。
- Series:一维标记数组,类似 Excel 的单列数据。
- DataFrame:二维表格结构,由多列 Series 组成,类似 Excel 的工作表。
比喻:可以把 DataFrame 想象成 Excel 的工作表,而 Series 是其中的一列数据。
基础操作:创建与查看数据
创建 DataFrame
通过字典或列表初始化:
import pandas as pd
data_dict = {
"Name": ["Alice", "Bob", "Charlie"],
"Age": [25, 30, 28],
"City": ["New York", "London", "Tokyo"]
}
df = pd.DataFrame(data_dict)
df = pd.read_csv("data.csv")
常用查看方法
print(df.head())
print(df.info())
print(df.describe())
数据选择与筛选
列的选择
ages = df["Age"]
subset = df[["Name", "City"]]
行的筛选
young_people = df[df["Age"] < 30]
selected = df[(df["Age"] > 25) & (df["City"] == "Tokyo")]
常用方法
loc[]
:通过标签索引(行标签 + 列名)。iloc[]
:通过位置索引(行号 + 列号)。
示例:
name = df.loc[0, "Name"]
subset = df.iloc[:2, :]
数据清洗与处理
处理缺失值
数据中的 NaN
值可通过以下方法处理:
cleaned_df = df.dropna()
filled_df = df.fillna({"Age": 0, "City": "Unknown"})
去重与排序
dedup_df = df.drop_duplicates()
sorted_df = df.sort_values(by="Age", ascending=False)
数据合并与连接
拼接数据
df_merged = pd.concat([df1, df2], axis=1)
df_appended = pd.concat([df1, df2], axis=0)
内连接与外连接
merged_df = pd.merge(
left=df1,
right=df2,
on="Common_Column", # 共同的键
how="inner" # 可选:inner, outer, left, right
)
比喻:concat
像是“堆叠乐高”,而 merge
像是“拼图”,需要找到共同的“拼接点”。
数据转换与计算
列的新增与修改
df["Age_Group"] = df["Age"].apply(lambda x: "Young" if x < 30 else "Old")
df["City"] = df["City"].str.upper()
分组聚合
grouped = df.groupby("City")["Age"].mean()
result = df.groupby(["City", "Age"])["Name"].count()
数据可视化
Pandas 内置了与 Matplotlib 的集成,可快速生成图表:
df["City"].value_counts().plot(kind="bar", title="City Distribution")
df.plot.scatter(x="Age", y="Salary", title="Age vs Salary")
高级技巧与性能优化
向量化操作
避免使用 for
循环遍历数据,改用向量化操作:
new_col = []
for age in df["Age"]:
if age > 30:
new_col.append("Old")
else:
new_col.append("Young")
df["Age_Group"] = new_col
df["Age_Group"] = np.where(df["Age"] > 30, "Old", "Young")
内存优化
对于大数据集,可调整数据类型:
df["Age"] = df["Age"].astype("int16")
实战案例:分析销售数据
数据加载与预览
sales_df = pd.read_csv("sales.csv")
print(sales_df.head())
核心分析步骤
-
计算总销售额:
total_sales = sales_df["Sales"].sum()
-
按地区统计销售额:
region_sales = sales_df.groupby("Region")["Sales"].sum()
-
可视化地区销售分布:
region_sales.plot(kind="pie", autopct="%1.1f%%", title="Sales by Region")
-
处理缺失值:
cleaned_sales = sales_df.fillna(0) # 假设缺失值用 0 填充
结论
通过本文的讲解,读者应已掌握 Pandas 的核心功能与常见操作。从基础的数据结构到高级的性能优化,Pandas 的灵活性和高效性使其成为数据分析的首选工具。无论是处理简单的 CSV 文件,还是构建复杂的数据分析流程,Pandas 都能提供强大的支持。建议读者通过实际项目巩固所学知识,并参考官方文档进一步探索进阶功能。
提示:持续练习是掌握 Pandas 的关键!尝试用 Pandas 处理你手中的数据,逐步提升分析能力。