数据科学和机器学习的“看家兵器”——pandas模块 之一

目录

  pandas 模块介绍

  4.1 pandas 数据结构

  一、课程目标

  二、Series 对象介绍

  三、DataFrame 对象介绍

  四、Series 和 DataFrame 在具体应用中的注意事项

  (一)Series 注意事项

  (二)DataFrame 注意事项

  五、实战案例

  案例 1:学生成绩分析

  案例 2:销售数据分析

  案例 3:股票数据分析

  案例 4:客户流失分析

  六、课程总结回顾

  七、课后练习题



  pandas 模块介绍

  pandas 是 Python 的一个开源数据分析库,为 Python 提供了高性能、易用的数据结构和数据分析工具。它建立在 NumPy 之上,使得以 NumPy 为中心的应用变得更加简单。pandas 的名字衍生自术语 "panel data"(面板数据)和 "Python data analysis"(Python 数据分析)。

  pandas 的主要数据结构是 Series(一维数组)和 DataFrame(二维表格型数据结构),它们能够处理各种类型的数据,无论是时间序列数据、表格数据还是矩阵数据。pandas 提供了高级数据操作功能,包括数据清洗、合并、重塑、聚合和时间序列分析等。它广泛应用于金融、经济、统计、社会科学等领域,是数据科学和机器学习工作流程中不可或缺的工具。

  4.1 pandas 数据结构

  一、课程目标

  本次课程主要围绕 pandas 的核心数据结构展开,通过理论讲解和案例分析,让学员掌握 Series 和 DataFrame 的基本概念、创建方法、数据操作及应用场景。学员学完本次课程后,能够熟练使用 pandas 进行基础的数据处理和分析工作。

  二、Series 对象介绍

  Series 是 pandas 的一维标记数组,能够保存任何数据类型(整数、字符串、浮点数、Python 对象等)。它由两部分组成:索引(index)和值(values)。索引在左侧,值在右侧。如果没有指定索引,pandas 会自动创建一个从 0 开始的整数索引。

  案例 1:基本 Series 对象的创建与操作

import pandas as pd# 创建Series对象
data = [10, 20, 30, 40, 50]
s = pd.Series(data)
print("基本Series对象:")
print(s)# 获取值
print("\nSeries的值:")
print(s.values)# 获取索引
print("\nSeries的索引:")
print(s.index)# 修改索引
s.index = ['a', 'b', 'c', 'd', 'e']
print("\n修改索引后的Series:")
print(s)# 通过索引访问值
print("\n通过索引'b'访问值:")
print(s['b'])# 通过位置访问值
print("\n通过位置2访问值:")
print(s[2])

  这个案例展示了 Series 的基本创建方法、获取值和索引的方式,以及如何修改索引和通过不同方式访问值。

  案例 2:带标签索引的 Series 对象

# 创建带标签索引的Series
data = {'北京': 1000, '上海': 1500, '广州': 800, '深圳': 1200}
s = pd.Series(data)
print("带标签索引的Series:")
print(s)# 索引顺序可以不同于字典中的键顺序
cities = ['上海', '北京', '深圳', '成都']
s = pd.Series(data, index=cities)
print("\n指定索引顺序的Series:")
print(s)# 检测缺失数据
print("\n检测缺失数据:")
print(s.isnull())# 数学运算
print("\nSeries乘以2:")
print(s * 2)# 布尔索引
print("\n筛选值大于1000的城市:")
print(s[s > 1000])

  此案例重点展示了如何使用字典创建 Series,以及如何处理缺失数据、进行数学运算和布尔索引。

  案例 3:时间序列索引的 Series 对象

# 创建时间序列索引的Series
dates = pd.date_range('20250101', periods=5)
s = pd.Series([10, 20, 30, 40, 50], index=dates)
print("时间序列索引的Series:")
print(s)# 通过日期访问值
print("\n访问2025年1月3日的值:")
print(s['2025-01-03'])# 访问某个时间段的值
print("\n访问2025年1月2日至2025年1月4日的值:")
print(s['2025-01-02':'2025-01-04'])# 时间序列切片
print("\n访问2025年1月3日及之后的值:")
print(s['2025-01-03':])# 添加新的日期值
s['2025-01-06'] = 60
print("\n添加新日期后:")
print(s)

  这个案例聚焦于时间序列索引的 Series,展示了如何创建、访问和操作时间序列数据。

  三、DataFrame 对象介绍

  DataFrame 是 pandas 的二维标记数据结构,由行索引和列索引组成。它类似于电子表格、SQL 表或 Series 对象构成的字典。DataFrame 可以接受多种类型的输入,如字典、Series、NumPy 数组、另一个 DataFrame 等。

  案例 1:基本 DataFrame 对象的创建与操作

# 创建DataFrame
data = {'城市': ['北京', '上海', '广州', '深圳', '杭州'],'人口(万)': [2154, 2424, 1490, 1303, 980],'GDP(亿)': [30320, 32680, 22859, 24222, 13509]
}
df = pd.DataFrame(data)
print("基本DataFrame对象:")
print(df)# 查看数据基本信息
print("\n数据基本信息:")
df.info()# 查看数据集行数和列数
rows, columns = df.shape# 查看数据集行数和列数
if rows < 10 and columns < 10:# 短表数据(行数少于10且列数少于10)查看全量数据信息print("\n数据全部内容信息:")print(df.to_csv(sep='\t', na_rep='nan'))
else:# 长表数据查看数据前几行信息print("\n数据前几行内容信息:")print(df.head().to_csv(sep='\t', na_rep='nan'))# 获取列
print("\n获取'城市'列:")
print(df['城市'])# 获取行
print("\n获取第2行:")
print(df.loc[1])# 添加新列
df['面积(km²)'] = [16410, 6340, 7434, 1997, 16853]
print("\n添加'面积'列后:")
print(df)# 计算人口密度
df['人口密度(人/km²)'] = df['人口(万)'] * 10000 / df['面积(km²)']
print("\n计算'人口密度'列后:")
print(df)

  这个案例展示了 DataFrame 的基本创建方法、获取行列数据的方式,以及如何添加新列和进行简单的数据计算。

  案例 2:使用不同数据源创建 DataFrame

# 从CSV文件创建DataFrame
# df = pd.read_csv('data.csv')# 从Excel文件创建DataFrame
# df = pd.read_excel('data.xlsx')# 从字典列表创建DataFrame
data = [{'姓名': '张三', '年龄': 25, '性别': '男'},{'姓名': '李四', '年龄': 30, '性别': '男'},{'姓名': '王五', '年龄': 28, '性别': '女'}
]
df = pd.DataFrame(data)
print("从字典列表创建的DataFrame:")
print(df)# 从Series字典创建DataFrame
d = {'one': pd.Series([1, 2, 3], index=['a', 'b', 'c']),'two': pd.Series([10, 20, 30, 40], index

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/82998.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STM32CubeMX HAL库 串口的使用

1.配置 2.开启中断后&#xff0c;生成代码 3.串口的接收 1&#xff09;.开启空闲中断接收 __HAL_UART_ENABLE_IT(huart, UART_IT_IDLE); // 关键步骤&#xff1a;启用空闲中断 2&#xff09;. 启动接收 调用 HAL_UARTEx_ReceiveToIdle_IT 启动异步接收&#xff0c;可以使用…

IIS服务器URL重写配置完整教程

1.下载URL Rewrite Module 2.1 https://www.iis.net/downloads/microsoft/url-rewrite https://download.microsoft.com/download/1/2/8/128E2E22-C1B9-44A4-BE2A-5859ED1D4592/rewrite_amd64_zh-CN.msi 2.安装

vite+vue建立前端工程

​ 参考 开始 | Vite 官方中文文档 VUE教程地址 https://cn.vuejs.org/tutorial/#step-1 第一个工程 https://blog.csdn.net/qq_35221977/article/details/137171497 脚本 chcp 65001 echo 建立vite工程 set PRO_NAMEmy-vue-appif not exist %PRO_NAME% (call npm i…

负进制转换

当一个数的基数是负数时&#xff0c;将这个数转换为负进制数时&#xff0c;大体思路和正数的情况一样&#xff0c;但是因为基数是负数&#xff0c;所以计算出来的余数就有可能是负数所以&#xff0c;需要在余数是负数时&#xff1a;将余数 基数的绝对值&#xff0c;商 1。 代…

K8S已经成为了Ai应用运行的平台工具

AI应用与K8s的深度融合&#xff1a;加速云原生时代的智能运维与业务创新 摘要&#xff1a; 随着人工智能&#xff08;AI&#xff09;技术的飞速发展&#xff0c;Kubernetes&#xff08;K8s&#xff09;作为容器编排领域的领军者&#xff0c;正逐步成为承载AI应用的核心基础设施…

NVMe简介1

它分为两部分&#xff0c;这里是第一部分。 NVM Express&#xff08;NVMe&#xff09;是一种高性能、可扩展的接口协议&#xff0c;用于通过PCI express&#xff08;PCIe&#xff09;总线&#xff0c;实现主机软件与NVM设备之间的通信。目前&#xff0c;由于NVMe SSD相比于SATA…

微服务商城(1)开篇、服务划分

参考&#xff1a;https://mp.weixin.qq.com/s?__bizMzg2ODU1MTI0OA&mid2247485597&idx1&sn7e85894b7847cc50df51d66092792453&scene21#wechat_redirect 为什么选择go-zero go-zero 为我们提供了许多高并发场景下的实用工具&#xff0c;比如为了降低接口耗时…

《隐私计算:数据安全与隐私保护的新希望》

一、引言 在数字化时代&#xff0c;数据已成为企业和组织的核心资产。然而&#xff0c;数据的收集、存储和使用过程中面临着诸多隐私和安全挑战。隐私计算作为一种新兴技术&#xff0c;旨在解决数据隐私保护和数据共享之间的矛盾。本文将深入探讨隐私计算的基本概念、技术原理、…

MySQL 学习(九)bin log 与 redo log 的区别有哪些,为什么快速恢复使用 redo log 而不用 bin log?

目录 一、bin log 与 redo log 的区别1&#xff09;实现方式不同&#xff1a;2&#xff09;日志内容不同&#xff1a;3&#xff09;记录方式不同&#xff1a;4&#xff09;使用场合不同&#xff1a; 二、为什么快速恢复使用 redo log 而不用 bin log&#xff1f; 面试题&#x…

用Array.from实现创建一个1-100的数组

一、代码实现 let arr Array.from({length: 100}, (_, i) > i 1); 二、代码分析 1、Array.from(arrayLike, mapFn) &#xff08;1&#xff09;arrayLike 类数组对象&#xff08;如 { length: 100 }&#xff09;本身没有索引属性&#xff08;如 0: undefined, 1: undefi…

javaScript简单版

简介 JavaScript&#xff08;简称:JS)是一门跨平台、面向对象的脚本语言&#xff0c;是用来控制网页行为&#xff0c;实现页面的交互效果。 JavaScript和Java是完全不同的语言&#xff0c;不论是概念还是设计。但是基础语法类似。 组成: ECMAScript:规定了JS基础语法核心知…

Python刷题练习

文章目录 1.寻找相同字串2.密钥格式化3.五键键盘的输出4.单词重量5.输出指定字母在字符串的中的索引6.污染水域7.九宫格按键输入8.任务最优调度9.高效的任务规划 1.寻找相同字串 题目描述: 给你两个字符串t和p&#xff0c;要求从t中找到一个和p相同的连续子串&#xff0c;并输…

MATLAB实现振幅调制(AM调制信号)

AM调制是通信专业非常重要的一个知识点。今天我们使用MATLAB编程实现AM调制。 我们实现输入一个载波信号的频率与调制信号的频率后&#xff0c;再输入调幅度&#xff0c;得到已调信号的波形与包络信号的波形&#xff0c;再使用FFT算法分析出已调信号的频谱图。 源代码&#x…

JJJ:linux ida

文章目录 1.总结2.各类函数2.1 分配一个仓库2.2 销毁仓库2.3 从仓库里面分配一个整数id2.4 将上面分配的整数id从仓库里面删除2.5 在指定范围内分配一个id 1.总结 ida使用起来很简单&#xff0c;就是先分配一个仓库一样的实例&#xff0c;再从这个仓库里面分配一个独一无二的整…

FastByteArrayOutputStream和ByteArrayInputStream有什么区别

FastByteArrayOutputStream 和 ByteArrayInputStream 是两种完全不同的 Java I/O 类&#xff0c;它们的主要区别体现在 设计目的 和 使用场景 上。以下是详细对比&#xff1a; 1. 核心区别总结 特性FastByteArrayOutputStream (Spring框架)ByteArrayInputStream (JDK原生)所属…

docker-compose——安装redis

文章目录 一、编写docker-compose.yaml文件二、编写redis.conf文件三、启动docker-compose 一、编写docker-compose.yaml文件 version: 3.3 services:redis:image: redis:latestcontainer_name: redisrestart: alwaysports:- 6379:6379volumes:- ./redis/data:/data- ./redis/…

东芝推出新的SCiB模块,散热性能加倍,适用于电动公交车、电动船舶和固定应用

东京—东芝公司推出了一种新的SCiB模块&#xff0c;这是一种专为电动汽车、电动船舶和固定应用而设计的锂离子电池。新产品采用铝制底板&#xff0c;散热量约为当前模块的两倍。它将于2025年4月中旬在日本和全球上市。 锂离子电池的使用越来越多&#xff0c;而且越来越多样化&a…

【进程控制二】进程替换和bash解释器

【进程控制二】进程替换 1.exec系列接口2.execl系列2.1execl接口2.2execlp接口2.3execle 3.execv系列3.1execv3.2总结 4.实现一个bash解释器4.1内建命令 通过fork创建的子进程&#xff0c;会继承父进程的代码和数据&#xff0c;因此本质上还是在执行父进程的代码 进程替换可以将…

Java基础语法之数组

数组 一、认识数组 1.什么是数组 数组就是一个容器&#xff0c;用来存一批同种类型的数据。 举例 20, 10, 80, 60, 90 int[] arr {20, 10, 80, 60, 90};张三, 李四, 王五 String[] names {"张三", "李四", "王五"};2.为什么要使用数组 假设…

Java死锁排查:线上救火实战指南

想象一下&#xff0c;你正在值班&#xff0c;突然监控告警红成一片&#xff0c;用户反馈雪花般飘来&#xff1a;“系统卡死了&#xff01;用不了了&#xff01;” —— 这很可能就是Java应用遭遇了“死锁”这个大魔王。这时候&#xff0c;你就是救火队长&#xff0c;首要任务不…