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 的 applymap 可以简化复杂逻辑:

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 字)

最新发布