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?
在数据分析与编程领域,Pandas 是一个不可或缺的工具。它如同一把“瑞士军刀”,能够灵活应对数据清洗、转换、分析等任务。对于编程初学者和中级开发者来说,掌握 Pandas 的核心功能,可以显著提升数据处理的效率,并为后续的机器学习、可视化等高级任务打下坚实基础。
Pandas 的设计哲学是“让数据操作变得直观且高效”。无论是从 CSV 文件读取数据,还是对海量数据进行聚合分析,Pandas 都提供了简洁而强大的 API(应用编程接口)。本文将从零开始,逐步介绍 Pandas 的核心概念、常用操作,以及实际应用场景,帮助读者快速上手这一工具。
一、Pandas 的基本概念与安装
1.1 什么是 Pandas?
Pandas 是基于 Python 的开源数据分析库,其名称来源于“Panel Data”(面板数据)和“Python Data Analysis”的缩写。它提供两种核心数据结构:Series(一维数据)和 DataFrame(二维表格数据)。
- Series:可以理解为带有标签的列表,类似于 Excel 中的一列数据。
- DataFrame:由多个 Series 组成的表格结构,类似于 Excel 的工作表。
1.2 安装与导入
安装 Pandas 非常简单,只需运行以下命令:
pip install pandas
在代码中导入时,通常使用别名 pd
:
import pandas as pd
二、数据结构:Series 和 DataFrame
2.1 Series 的创建与操作
创建 Series
可以通过列表、字典或 NumPy 数组创建 Series:
s1 = pd.Series([10, 20, 30, 40])
print(s1)
s2 = pd.Series({"apple": 5, "banana": 3, "orange": 7})
print(s2)
Series 的属性与方法
- 索引(index):Series 的行标签,默认为整数。
- 值(values):返回底层 NumPy 数组。
- 操作示例:
print(s1.mean())
print(s2["apple"])
2.2 DataFrame 的创建与操作
创建 DataFrame
data = {
"Name": ["Alice", "Bob", "Charlie"],
"Age": [25, 30, 28],
"City": ["New York", "London", "Tokyo"]
}
df = pd.DataFrame(data)
print(df)
df = pd.DataFrame(
[[25, "New York"], [30, "London"], [28, "Tokyo"]],
index=["Alice", "Bob", "Charlie"],
columns=["Age", "City"]
)
DataFrame 的核心操作
-
查看数据:
print(df.head()) # 显示前几行 print(df.describe()) # 统计数值列的摘要
-
选择列与行:
# 选择单列(返回 Series) print(df["Age"]) # 选择多列(返回 DataFrame) print(df[["Name", "City"]]) # 根据索引选择行 print(df.loc["Alice"]) # 根据标签 print(df.iloc[0]) # 根据位置
三、数据清洗与转换
3.1 处理缺失值
现实数据中常存在缺失值(NaN),Pandas 提供了多种方法处理这类问题:
df_missing = pd.DataFrame(
{
"A": [1, 2, None],
"B": [4, None, 6]
}
)
df_cleaned = df_missing.dropna()
df_filled = df_missing.fillna(df_missing.mean())
3.2 数据类型转换
数据类型(dtype)可能影响计算效率或准确性,Pandas 允许灵活转换:
df["Age"] = df["Age"].astype(int)
print(df.dtypes)
3.3 数据排序与排序
sorted_df = df.sort_values(by="Age")
sorted_index = df.sort_index()
四、数据聚合与统计分析
4.1 分组聚合(GroupBy)
分组聚合是 Pandas 的核心功能之一,类似于 SQL 的 GROUP BY
:
sales_data = pd.DataFrame(
{
"Region": ["East", "West", "East", "North", "West"],
"Sales": [100, 150, 200, 50, 250]
}
)
grouped = sales_data.groupby("Region").sum()
print(grouped)
4.2 常用统计方法
Pandas 提供了丰富的统计方法,例如:
print(df["Age"].mean())
print(df["Age"].std())
print(df["Age"].max())
print(df["Age"].min())
五、数据合并与连接
5.1 合并 DataFrame
合并操作(merge
)用于将两个 DataFrame 按指定键合并:
employees = pd.DataFrame(
{
"ID": [1, 2, 3],
"Name": ["Alice", "Bob", "Charlie"],
"Department": ["HR", "Tech", "Tech"]
}
)
departments = pd.DataFrame(
{
"ID": [1, 2, 3],
"Department_Budget": [50000, 100000, 80000]
}
)
merged = pd.merge(employees, departments, on="ID")
5.2 追加数据(Concat)
使用 concat
将多个 DataFrame 按行或列拼接:
df1 = pd.DataFrame({"A": [1, 2], "B": [3, 4]})
df2 = pd.DataFrame({"A": [5, 6], "B": [7, 8]})
result = pd.concat([df1, df2])
六、实际案例:分析电影数据
6.1 加载数据
假设我们有一个电影数据集 movies.csv
,包含以下字段:
| 列名 | 描述 |
|--------------|--------------------|
| Title | 电影名称 |
| Genre | 类型(如动作、喜剧)|
| Year | 上映年份 |
| Rating | 用户评分(0-10) |
movies = pd.read_csv("movies.csv")
print(movies.head())
6.2 探索性分析
-
计算平均评分:
avg_rating = movies["Rating"].mean() print(f"平均评分为:{avg_rating:.2f}")
-
按类型分组统计:
genre_stats = movies.groupby("Genre").agg( count=("Title", "count"), avg_rating=("Rating", "mean") ).sort_values(by="avg_rating", ascending=False)
6.3 数据过滤与可视化
-
筛选高评分电影:
top_movies = movies[movies["Rating"] >= 8.5]
-
绘制类型分布图:
import matplotlib.pyplot as plt genre_counts = movies["Genre"].value_counts() genre_counts.plot(kind="bar") plt.title("Movie Genre Distribution") plt.show()
七、最佳实践与性能优化
7.1 内存优化技巧
- 使用适当的数据类型:例如,将整数列转为
int32
而非int64
。 - 删除冗余列:使用
drop
删除无关列。
7.2 向量化操作
避免使用循环,改用 Pandas 的向量化操作:
for index, row in df.iterrows():
row["New_Column"] = row["A"] + row["B"]
df["New_Column"] = df["A"] + df["B"]
7.3 利用内置函数
Pandas 的 apply
和 map
可以简化复杂逻辑:
def age_group(age):
if age < 30:
return "Young"
else:
return "Adult"
df["Age_Group"] = df["Age"].apply(age_group)
结论:Pandas 的价值与未来
Pandas 凭借其简洁的语法和强大的功能,已成为数据分析领域的标准工具。无论是处理小型 CSV 文件,还是对海量数据进行复杂分析,它都能提供高效且直观的解决方案。对于编程初学者,建议从基础操作开始,逐步掌握分组、聚合、合并等进阶功能;中级开发者则可以深入探索性能优化和高级 API 的应用。
随着数据分析需求的不断增长,Pandas 的生态也在持续扩展。掌握这一工具,不仅能提升个人技能,更能为后续学习机器学习、数据可视化等技术打下坚实基础。立即打开你的 Python 环境,尝试用 Pandas 解决实际问题吧!
(全文约 2000 字)