【机器学习基础 4】 Pandas库

news/2025/4/1 5:27:18/

一、Pandas库简介

        Pandas 是一个开源的 Python 数据分析库,主要用于数据清洗、处理、探索与分析。其核心数据结构是 Series(一维数据)和 DataFrame(二维表格数据),可以让我们高效地操作结构化数据。Pandas 提供了许多灵活且高效的数据操作方法,能够快速地进行数据筛选、聚合、转换和可视化,是数据科学和机器学习工作流中非常重要的一环。

二、Pandas库安装

  通常直接通过 pip 来安装;当然,在Anaconda虚拟环境中亦可用如下两种方式:

pip install pandasconda install pandas

  在编写中导入Pandas库,我们通常会习惯将其简化为pd:

import pandas as pd

三、常用的Pandas函数

1、数据读取

Pandas库支持多种数据格式的导入,例如 CSV、Excel、SQL 数据库、JSON 等,方便我们从各种数据源中获取数据。假设我们有一个CSV文件,内部如下:

ID,Name,Age,Score
1,Tom,22,85.0
2,Lily,21,92.0
3,Jack,23,78.0
4,Lucy,22,89.0
5,Rose,21,95.0

我们想要读取,则可以:

import pandas as pd# 读取 CSV 文件
df = pd.read_csv('sample.csv')  
print(df.head())  # 查看前 5 行

样例输出:

   ID Name  Age   Score
0   1  Tom   22   85.0
1   2  Lily  21   92.0
2   3  Jack  23   78.0
3   4  Lucy  22   89.0
4   5  Rose  21   95.0

 2、查看数据

如果我们想快速检查数据的基本信息,如行数、列数、数据类型,则可以前面的基础上加上:

print(df.info())    # 查看数据的基本信息
print(df.describe())  # 生成数据的统计摘要

样例输出:

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 5 entries, 0 to 4
Data columns (total 4 columns):#   Column  Non-Null Count  Dtype
---  ------  --------------  -----0   ID      5 non-null      int641   Name    5 non-null      object2   Age     5 non-null      int643   Score   5 non-null      float64
dtypes: float64(1), int64(2), object(1)
memory usage: 288.0+ bytes
NoneID       Age      Score
count  5.000000   5.00000   5.000000
mean   3.000000  21.80000  87.800000
std    1.581139   0.83666   6.610598
min    1.000000  21.00000  78.000000
25%    2.000000  21.00000  85.000000
50%    3.000000  22.00000  89.000000
75%    4.000000  22.00000  92.000000
max    5.000000  23.00000  95.000000

 3、数据选择与过滤

当然,我们还可以对数据进行选择和过滤,就像下面这样:

# 选择某一列
print(df['Name'],'\n')  # 选择多列
print(df[['Name', 'Score']],'\n')  # 选择特定行(iloc 按索引,loc 按标签)
print(df.iloc[1])  
print(df.loc[df['Score'] > 90])  # 筛选成绩大于 90 的行

样例输出:

0     Tom
1    Lily
2    Jack
3    Lucy
4    Rose
Name: Name, dtype: object Name  Score
0   Tom   85.0
1  Lily   92.0
2  Jack   78.0
3  Lucy   89.0
4  Rose   95.0 ID          2
Name     Lily
Age        21
Score    92.0
Name: 1, dtype: objectID  Name  Age  Score
1   2  Lily   21   92.0
4   5  Rose   21   95.0

4、数据清洗

Pandas库还可以处理缺失值(用dropna、fillna)、重复值(用drop_duplicates)、替换值(用replace)等。

例如:(我们先把CSV中Rose的score删掉

# 删除缺失值
df_cleaned = df.dropna()
print("删除缺失值后的DataFrame:")
print(df_cleaned.head())# 填充缺失值
df_filled = df.fillna(value={'Score': df['Score'].mean()})
print("\n填充缺失值后的DataFrame:")
print(df_filled.head())# 删除重复值
df_unique = df.drop_duplicates()
print("\n删除重复值后的DataFrame:")
print(df_unique.head())# 替换值
df_replaced = df.replace({'Tom': 'Tommy'})
print("\n替换值后的DataFrame:")
print(df_replaced.head())

样例输出:

删除缺失值后的DataFrame:ID  Name  Age  Score 
0   1   Tom   22   85.0 
1   2  Lily   21   92.0 
2   3  Jack   23   78.0 
3   4  Lucy   22   89.0 填充缺失值后的DataFrame:ID  Name  Age  Score 
0   1   Tom   22   85.0 
1   2  Lily   21   92.0 
2   3  Jack   23   78.0 
3   4  Lucy   22   89.0 
4   5  Rose   21   86.0 删除重复值后的DataFrame:ID  Name  Age  Score
0   1   Tom   22   85.0
1   2  Lily   21   92.0
2   3  Jack   23   78.0
3   4  Lucy   22   89.0
4   5  Rose   21    NaN替换值后的DataFrame:ID   Name  Age  Score
0   1  Tommy   22   85.0
1   2   Lily   21   92.0
2   3   Jack   23   78.0
3   4   Lucy   22   89.0
4   5   Rose   21    NaN

5、数据的排序、分组求均值、合并、连接

排序会使用到sort_values函数,分组则使用groupby,合并使用merge,连接使用concat

例如:

# 按 'Score' 排序
df_sorted = df.sort_values(by='Score', ascending=False)
print("按 'Score' 排序后的数据:\n", df_sorted)# 分组并求均值
df_grouped = df.groupby('Age')['Score'].mean()
print("按 'Age' 分组并求 'Score' 的均值:\n", df_grouped)# 合并数据
df1 = pd.DataFrame({'ID': [1, 2, 3], 'Class': ['A', 'B', 'A']})
df_merged = df.merge(df1, on='ID', how='left')
print("合并后的数据:\n", df_merged)# 连接多个 DataFrame
df_concat = pd.concat([df, df1], axis=0)
print("连接后的数据:\n", df_concat)

 注意:DataFrame 是Pandas库中的一个函数,用于创建一个数据框(DataFrame)。
        {'ID': [1, 2, 3], 'Class': ['A', 'B', 'A']} 是一个字典,其中键是列名,值是对应的数据。
        'ID' 是列名,对应的数据是 [1, 2, 3];'Class' 是列名,对应的数据是 ['A', 'B', 'A']。
        df1 是一个新创建的数据框,包含两列:ID和Class

        merge是Pandas中用于合并两个数据框的函数。
        df1 是要与当前数据框 df 合并的另一个数据框。
        on='ID' 指定了合并的键(key),即根据两表中的 ID列进行合并。
        how='left' 指定了合并的方式为左连接(left join)。这意味着结果将包含左表(即 df)中的所有行,即使右表(即 df1)中没有匹配的行。如果右表中没有匹配的行,结果中对应的列将填充为NaN。

样例输出:

按 'Score' 排序后的数据:ID  Name  Age  Score
4   5  Rose   21   95.0
1   2  Lily   21   92.0
3   4  Lucy   22   89.0
0   1   Tom   22   85.0
2   3  Jack   23   78.0
按 'Age' 分组并求 'Score' 的均值:Age
21    93.5
22    87.0
23    78.0
Name: Score, dtype: float64      
合并后的数据:ID  Name  Age  Score Class
0   1   Tom   22   85.0     A
1   2  Lily   21   92.0     B
2   3  Jack   23   78.0     A
3   4  Lucy   22   89.0   NaN
4   5  Rose   21   95.0   NaN
连接后的数据:ID  Name   Age  Score Class
0   1   Tom  22.0   85.0   NaN
1   2  Lily  21.0   92.0   NaN
2   3  Jack  23.0   78.0   NaN
3   4  Lucy  22.0   89.0   NaN
4   5  Rose  21.0   95.0   NaN
0   1   NaN   NaN    NaN     A
1   2   NaN   NaN    NaN     B
2   3   NaN   NaN    NaN     A

6、数据转换

例如:

# 创建数据透视表
pivot_table = df.pivot_table(values='Score', index='Age', aggfunc='mean')
print("透视表:\n", pivot_table)# 使用 apply() 转换数据
df['Score_Squared'] = df['Score'].apply(lambda x: x ** 2)
print("转换后的数据:\n", df)# 更改数据类型
df['Age'] = df['Age'].astype(float)
print("更改数据类型后的数据:\n", df)

样例输出:

透视表:Score
Age       
21    93.5
22    87.0
23    78.0
转换后的数据:ID  Name  Age  Score  Score_Squared
0   1   Tom   22   85.0         7225.0 
1   2  Lily   21   92.0         8464.0 
2   3  Jack   23   78.0         6084.0 
3   4  Lucy   22   89.0         7921.0 
4   5  Rose   21   95.0         9025.0 
更改数据类型后的数据:ID  Name   Age  Score  Score_Squared
0   1   Tom  22.0   85.0         7225.0
1   2  Lily  21.0   92.0         8464.0
2   3  Jack  23.0   78.0         6084.0
3   4  Lucy  22.0   89.0         7921.0
4   5  Rose  21.0   95.0         9025.0

7、日期与时间处理

例如:

# 创建日期列
df['Date'] = pd.to_datetime(['2023-01-01', '2023-01-02', '2023-01-03', '2023-01-04', '2023-01-05'])# 提取年份、月份、星期
df['Year'] = df['Date'].dt.year
df['Month'] = df['Date'].dt.month
df['Weekday'] = df['Date'].dt.day_name()print(df)

样例输出:

   ID  Name  Age  Score       Date  Year  Month    Weekday
0   1   Tom   22   85.0 2023-01-01  2023      1     Sunday
1   2  Lily   21   92.0 2023-01-02  2023      1     Monday
2   3  Jack   23   78.0 2023-01-03  2023      1    Tuesday
3   4  Lucy   22   89.0 2023-01-04  2023      1  Wednesday
4   5  Rose   21   95.0 2023-01-05  2023      1   Thursday


http://www.ppmy.cn/news/1584086.html

相关文章

【Apache Hive】

一、Hive简介 官网&#xff1a;https://hive.apache.org 1、Hive是什么&#xff1f; Apache Hive 是一款建立在Hadoop之上的开源数据仓库系统&#xff0c;可以将存储在Hadoop文件中的结构化、半结构化数据文件映射为一张数据库表&#xff0c;基于表提供了一种类似SQL的查询模型…

Node.js 模块加载机制--详解

目录 Node.js 模块加载机制详解 1. 什么是模块&#xff1f; 2. 模块加载顺序 3. 核心模块加载 4. 自定义模块加载 5. 目录作为模块&#xff08;index.js&#xff09; 6. require.resolve() 查找模块路径 7. module 对象解析 8. require.cache 机制&#xff08;避免重复…

零基础使用AI从0到1开发一个微信小程序

零基础使用AI从&#xff10;到&#xff11;开发一个微信小程序 准备操作记录 准备 想多尝试一些新的交互方式&#xff0c;但我没有相关的开发经验&#xff0c;html&#xff0c;JavaScript 等都不了解&#xff0c;看了一些使用AI做微信小程序的视频教程&#xff0c;觉得自己也行…

Docker 快速入门指南

Docker 快速入门指南 1. Docker 常用指令 Docker 是一个轻量级的容器化平台&#xff0c;可以帮助开发者快速构建、测试和部署应用程序。以下是一些常用的 Docker 命令。 1.1 镜像管理 # 搜索镜像 docker search <image_name># 拉取镜像 docker pull <image_name>…

大模型在支气管扩张预测及治疗方案制定中的应用研究

目录 一、引言 1.1 研究背景与意义 1.2 研究目的与方法 1.3 国内外研究现状 二、大模型技术概述 2.1 大模型的基本原理与架构 2.2 适用于支气管扩张预测的大模型类型及特点 2.3 大模型在医疗领域的应用现状与优势 三、支气管扩张的相关医学知识 3.1 支气管扩张的病因…

Vue3.5 企业级管理系统实战(十一):全屏切换组件

本篇主要探讨如何在导航栏&#xff08;Navbar&#xff09;中添加全屏切换按钮&#xff0c;并借助功能强大的 screenfull 插件&#xff0c;丝滑实现全屏切换功能&#xff0c;为用户打造更为便捷、流畅的交互体验。 1 安装插件 screenfull screenfull 是一个轻量级的 JavaScript…

Appium中元素定位之一组元素定位API

应用场景 和定位一个元素相同&#xff0c;但如果想要批量的获取某个相同特征的元素&#xff0c;使用定位一组元素的方式更加方便 在 Appium 中定位一组元素的 API 与定位单个元素的 API 类似&#xff0c;但它们返回的是一个元素列表&#xff08;List<MobileElement>&am…

蓝桥杯 班级活动

问题描述 小明的老师准备组织一次班级活动。班上一共有 n 名同学&#xff08;n 为偶数&#xff09;&#xff0c;老师想把所有同学进行分组&#xff0c;每两名同学一组。 为了公平&#xff0c;老师给每名同学随机分配了一个 n 以内的正整数作为 id&#xff0c;第 i 名同学的 i…