Pandas时序数据分析实践—基础(1)
目录
- 1. Pandas基本结构
- 2. Pandas数据类型
- 2.1. 类型概述
- 2.1.1. 整数类型(int):
- 2.1.2. 浮点数类型(float):
- 2.1.3. 布尔类型(bool):
- 2.1.4. 字符串类型(object):
- 2.1.5. 时间类型:
- 2.1.6. 分类类型:
- 2.2. 类型内存
- 2.3. Pandas数据类型与python、numpy对比
- 2.3. 类型转换
- 3. 常用函数
- 3.1. 基本函数
- 3.2. 窗口函数
- 3.3. 基本统计
1. Pandas基本结构
Pandas是一个基于Numpy的数据结构,它提供了两种主要的数据结构:Series和DataFrame。Series是一种一维的数组型对象,它包含了一个值序列。DataFrame是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型值)。DataFrame既有行索引也有列索引,它可以被看做由Series组成的字典(共同用一个索引) 。
- Series是一种一维的带标签数组对象,Series中的元素可以是任何类型的数据;
- DataFrame,二维数据表,是Series容器,而DataFrame中的元素必须是同一种类型的数据 。
其中,最常用的是DataFrame,做为数据分析数据载体——二维数据表,基于此有大量的统计分析函数。DataFrame结构如下图所示。
DataFrame是由多种类型的列构成的二维标签数据结构,类似于Excel、SQL表,或Series对象构成的字典。DataFrame既有行索引也有列索引,它可以被看做由Series组成的字典(共同用一个索引) 。
DataFrame的数据由三个部分组成:行索引、列索引和数据。每个元素都有一个行索引和一个列索引,它们都是唯一的。行索引和列索引都可以是任何类型的对象,例如整数、字符串、日期等。
2. Pandas数据类型
2.1. 类型概述
使用pandas进行数据分析时,最常用到的几种类型是:字符串类型、数值类型(整数和浮点数)、日期类型、category 类型。
import pandas as pd
import numpy as np# 创建一个包含各种类型的DataFrame
data = {'Integer': pd.Series([1, 2, 3], dtype='int32'),'Float': pd.Series([21.1, 25.2, 30.3], dtype='float64'),'Boolean': pd.Series([True, False, True], dtype='bool'),'String': pd.Series(['植物园', '湘江公园', '太阳岛'], dtype='object'),'Datetime': pd.to_datetime(['2022-01-01', '2022-02-01', '2022-03-01']),
}df = pd.DataFrame(data)# 添加一个分类类型的列
df['Category'] = pd.Series(['dog', 'cat', 'dog'], dtype='category')print("包含各种类型的DataFrame:\n", df)
2.1.1. 整数类型(int):
概述: Pandas 提供不同精度的整数类型,如int8、int16、int32、int64,用于存储整数数据。
应用场景: 选择合适的整数类型有助于减小数据集的内存占用。
2.1.2. 浮点数类型(float):
概述: Pandas 支持不同精度的浮点数类型,如float16、float32、float64,用于存储带小数的数值。
注意事项: 选择适当的浮点数类型有助于平衡精度和内存占用。
2.1.3. 布尔类型(bool):
概述: 布尔类型用于存储逻辑值,通常在数据筛选中使用。
应用场景: 用于筛选数据集中的特定条件。
2.1.4. 字符串类型(object):
概述: Pandas 的字符串类型,通常使用 object 表示,适用于包含文本数据的列。
字符串操作: Pandas 提供了丰富的字符串操作,如字符串拼接、切片、替换等。
2.1.5. 时间类型:
概述: Pandas 提供 datetime 类型用于处理日期和时间数据。
日期操作: 支持日期的解析、格式化、加减等操作。
时间序列: 时间类型在 Pandas 中常用于创建时间序列索引。
2.1.6. 分类类型:
概述: Pandas 提供 category 类型用于处理有限个数的离散值,提高性能和内存效率。
应用场景: 适用于重复值较多的列,如性别、地区等。
2.2. 类型内存
通过观察内存使用情况,你可以更好地了解哪些列占用了大量内存,从而决定是否需要调整它们的数据类型。memory_usage 方法是一个非常有用的工具,可以用于查看 DataFrame 中各列的内存使用情况。合理选择数据类型是优化内存使用的重要步骤之一,特别是当处理大型数据集时。
# 接续上面的代码。
df.memory_usage(deep=True)
Index 128Integer 12Float 24Boolean 3String 266Datetime 24Category 400dtype: int64
在这个例子中,memory_usage(deep=True) 会返回一个 Series,其中包含每列的内存使用情况。deep=True 会深入到对象中,对于字符串类型的列,会计算字符串的实际内存使用情况。
2.3. Pandas数据类型与python、numpy对比
Pandas dtype | Python类型 | Numpy类型 | 说明 |
---|---|---|---|
object | str | string_,unicode_ | 用于文本 |
int64 | int | int_,int8_,int16,int32,int64,uint8,uint16,uint32,uint64 | 用于整数 |
float64 | float | float_,float16,float32,float64 | 用于浮点数 |
bool | bool | bool_ | 用于布尔值 |
datetime64 | NA | NA | 用于日期时间 |
timedelta[ns] | NA | NA | 用于时间差 |
category | NA | NA | 用于有限长度的文本值列表 |
2.3. 类型转换
import pandas as pd# 创建一个包含不同类型数据的DataFrame
data = {'Float': [1.1, 2.2, 3.3],'Integer': [1, 2, 3],'Timestamp': pd.to_datetime(['2022-01-01', '2022-02-01', '2022-03-01']),'TimestampString': ['2022-01-01', '2022-02-01', '2022-03-01']
}df = pd.DataFrame(data)# 转换 'Float' 列为字符串
df['Float'] = df['Float'].astype(str)# 转换 'TimestampString' 列为 datetime64 类型
df['TimestampString'] = pd.to_datetime(df['TimestampString'])# 查看转换后的数据类型
print("\n转换类型后的数据类型:\n", df.dtypes)# 转换 'Float' 列为字符串
df['Float'] = df['Float'].astype('float32')df['TimestampString'] = df['TimestampString'].dt.strftime('%Y-%m-%d %H:%M')
# 查看再转换后的数据类型
print("\n再转换类型后的数据类型:\n", df.dtypes)
df
当数据类型转换处理 Pandas DataFrame 时,dtypes 和 astype 的使用是非常重要的。
-
dtypes:
dtypes 是 DataFrame 对象的一个属性,用于查看每一列的数据类型。它返回一个 Series,其中包含 DataFrame 的每一列及其相应的数据类型。这对于了解数据的初始类型非常有用。 -
astype:
astype 是 Pandas 中的一个方法,用于将一列的数据类型转换为指定的类型。这对于数据清洗和预处理非常有用。它返回一个新的 Series 或 DataFrame,而不会改变原始对象。
3. 常用函数
3.1. 基本函数
- head() 和 tail(): 展示数据的前几行和后几行。
- info(): 提供有关 DataFrame 的详细信息,包括数据类型、非空值数等。
- describe(): 统计描述性统计信息,如平均值、标准差、最小值、最大值等。
- shape: 显示 DataFrame 的形状,即行数和列数。
以2.1章节的代码为例,继续代码,使用函数:
df.head(2)
df.tail(2)
df.info()
df.describe()
df.shape
(3, 6)
3.2. 窗口函数
- rolling(): 介绍窗口函数,用于执行滚动计算,如滚动平均值。
一般在使用了移动窗口函数rolling之后,我们需要配合使用相关的统计函数,比如sum、mean、max等。使用最多的是mean函数,生成移动平均值。
df.rolling(2).mean()
- expanding(): 展示扩展窗口,用于计算扩展窗口内的累积统计。
扩展窗口函数,扩展是指由序列的第一个元素开始,逐个向后计算元素的聚合值。expanding()函数,类似cumsum()函数的累计求和,其优势在于还可以进行更多的聚类计算。
df.expanding().sum()
3.3. 基本统计
首先,我们以sum()、mean()、median()常用统计函数的介绍,说明如何计算总和、均值、中位数等。
import pandas as pd
import numpy as np# 创建一个包含各种类型的DataFrame
data = {'Integer': pd.Series([1, 2, 3, 5, 3, 7, 6], dtype='int32'),'Float': pd.Series([21.1, 25.2, 30.3, 22.1, 10.1, 30.2, 32.3], dtype='float64'),'Boolean': pd.Series([True, False, True, True, False, True , False], dtype='bool'),'String': pd.Series(['植物园', '湘江公园', '太阳岛','植物园', '湘江公园', '太阳岛','八区体育场'], dtype='object'),'Datetime': pd.to_datetime(['2022-01-01', '2022-02-01', '2022-03-01', '2022-03-11', '2022-05-01', '2022-05-02','2022-06-01']),
}df = pd.DataFrame(data)# 添加一个分类类型的列
df['Category'] = pd.Series(['节奏跑', '间隙跑', '慢跑','节奏跑', '间隙跑', '慢跑', '慢跑'], dtype='category')print("包含各种类型的DataFrame:\n", df)print("包含合计sum::\n",df[['Integer','Float']].sum())
print("包含均值mean::\n",df[['Integer','Float']].mean())
print("包含中位数median::\n",df[['Integer','Float']].median())
序号 | 函数 | 含义 |
---|---|---|
1 | min() | 计算最小值 |
2 | max() | 计算最大值 |
3 | sum() | 求和 |
4 | mean() | 计算平均值 |
5 | count() | 计数(统计非缺失元素的个数) |
6 | size() | 计数(统计所有元素的个数) |
7 | median() | 计算中位数 |
8 | var() | 计算方差 |
9 | std() | |
10 | quantile() | 计算任意分位数 |
11 | cov() | 计算协方差 |
12 | corr() | 计算相关系数 |
13 | skew() | 计算偏度 |
14 | kurt() | 计算峰度 |
15 | mode() | 计算众数 |
16 | describe() | 描述性统计(一次性返回多个统计结果) |
17 | groupby() | 分组 |
18 | aggregate() | 聚合运算(可以自定义统计函数) |
19 | argmin() | 寻找最小值所在位置 |
20 | argmax() | 寻找最大值所在位置 |
21 | any() | 等价于逻辑“或” |
22 | all() | 等价于逻辑“与” |
23 | value_counts() | 频次统计 |
24 | cumsum() | 运算累计和 |
25 | cumprod() | 运算累计积 |
26 | pct_change() | 运算比率(后一个元素与前一个元素的比率) |
例如:
df[['Integer','Float']].pct_change()
统计函数是数据分析的核心内容之一,将 在后续内容中展开。
相关文章:

Pandas时序数据分析实践—基础(1)
目录 1. Pandas基本结构2. Pandas数据类型2.1. 类型概述2.1.1. 整数类型(int):2.1.2. 浮点数类型(float):2.1.3. 布尔类型(bool):2.1.4. 字符串类型(object&a…...

5.C转python
新始: 13.列表可被改变(数据),元组不可被改变(数据),二者皆与C中的数组的大致相同 14.创建列表方法: 1.一个[ ]就是一个空的列表 2.使用list函数来创建列表 如: 15.可以在[ ]内部指定列表的初始值,打印方法: 如: 16.在python中,在同一个列表中,可以放不同类型的变量(也可…...

输出SearchFacesResponse对象的JSON格式字符串回包乱码解决方案
输出SearchFacesResponse对象的JSON格式字符串设置响应内容类型为"application/json;charsetutf-8"获取响应的字符输出流将SearchFacesResponse对象转化为JSON字符串并输出。 代码片段 System.out.println(SearchFacesResponse.toJsonString(resp)); response.setC…...

P7 链表 链表头前方插入新节点
目录 前言 01 链表头插入数据 示例代码 02 指定节点前方插入新节点 测试代码 前言 🎬 个人主页:ChenPi 🐻推荐专栏1: 《C》✨✨✨ 🔥 推荐专栏2: 《 Linux C应用编程(概念类)_ChenPi的博客-CSDN博客》✨…...

SCAU:主对角线上的元素之和
主对角线上的元素之和 Time Limit:1000MS Memory Limit:65535K 题型: 编程题 语言: G;GCC 描述 输入一个3行4列的整数矩阵,计算并输出主对角线上的元素之和输入格式 3行4列整数矩阵输出格式 主对角线上的元素之和输入样例 1 2 3 4 5 6 7 8 9 10 11 12输出…...

c语言——简单客户端demo
以下是一个简单的C语言客户端示例,用于连接到服务器并发送和接收数据: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/socket.h> #include <arpa/inet.h> #include <unistd.h…...

日志检索场景ES->Doris迁移最佳实践:函数篇
函数列表 函数:term函数功能说明:查询某个字段里含有某个关键词的文档参数说明:返回值说明:ES使用示例: {"query": {"term": {"title": "blog"}} }Doris使用示例…...

【高效开发工具系列】jackson入门使用
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

深入理解网络非阻塞 I/O:NIO
🔭 嗨,您好 👋 我是 vnjohn,在互联网企业担任 Java 开发,CSDN 优质创作者 📖 推荐专栏:Spring、MySQL、Nacos、Java,后续其他专栏会持续优化更新迭代 🌲文章所在专栏&…...

Hdoop学习笔记(HDP)-Part.07 安装MySQL
目录 Part.01 关于HDP Part.02 核心组件原理 Part.03 资源规划 Part.04 基础环境配置 Part.05 Yum源配置 Part.06 安装OracleJDK Part.07 安装MySQL Part.08 部署Ambari集群 Part.09 安装OpenLDAP Part.10 创建集群 Part.11 安装Kerberos Part.12 安装HDFS Part.13 安装Ranger …...

[数据结构]HashSet与LinkedHashSet的底层原理学习心得
我们区分list和set集合的标准是三个:有无顺序,可否重复,有无索引。 list的答案是:有顺序,可重复,有索引。这也就是ArrayList和LinkedList的共性 set的答案是:顺序内部再区分,不可以重复…...

使用unity开发Pico程序,场景中锯齿问题
1、问题 使用unity【非HDR】开发Pico程序,场景中锯齿问题,设置了unity的抗锯齿和渲染方式,及悬挂抗锯齿的脚本,都不能很好的解决项目中图片、文字的锯齿问题,通过摸索找到了妥善的方法 1、修改项目中图片的 GenerateMIpMaps 为勾…...

Spring | Spring的基本应用
目录: 1.什么是Spring?2.Spring框架的优点3.Spring的体系结构 (重点★★★) :3.1 Core Container (核心容器) ★★★Beans模块 (★★★) : BeanFactoryCore核心模块 (★★★) : IOCContext上下文模块 (★★★) : ApplicationContextContext-support模块 (★★★)SpE…...

项目开发维护技术文档(梳理总结中)
目录 项目名称——惠誉灵境 一、项目背景 二、架构设计 1.技术栈 2.架构图 3.代码结构 三、模块划分 1.平台首页 2.登录模块 3.系统模块 (1)系统首页 (2)组织架构 (3)权限管控 ①角色管理 (4&am…...

【接口测试】Apifox实用技巧干货分享
前言 不知道有多少人和我有着这样相似的经历:从写程序只要不报错就不测试😊,到写了程序若是有bug就debug甚至写单元测试,然后到了真实开发场景,大哥和你说,你负责的功能模块的所有接口写完要测试一遍无误在…...

车联网架构设计(一)_消息平台的搭建
车联网是物联网的一个主要应用方向,车辆通过连接车联网平台,实时进行消息的交互,平台可以提供车辆远程控制,故障检测,车路协同等各方面的功能。 我在车联网行业从事了很长时间的技术工作,参与了整个车联网…...

(蓝桥杯)1125 第 4 场算法双周赛题解+AC代码(c++/java)
题目一:验题人的生日【算法赛】 验题人的生日【算法赛】 - 蓝桥云课 (lanqiao.cn) 思路: 1.又是偶数,又是质数,那么只有2喽 AC_Code:C #include <iostream> using namespace std; int main() {cout<<2;return 0; …...

也可Adobe Animate
Animate CC 由原Adobe Flash Professional CC 更名得来,2015年12月2日:Adobe 宣布Flash Professional更名为Animate CC,在支持Flash SWF文件的基础上,加入了对HTML5的支持。并在2016年1月份发布新版本的时候,正式更名为…...

【面试HOT200】回溯篇
系列综述: 💞目的:本系列是个人整理为了秋招面试的,整理期间苛求每个知识点,平衡理解简易度与深入程度。 🥰来源:材料主要源于【CodeTopHot300】进行的,每个知识点的修正和深入主要参…...

JVM——内存溢出和内存泄漏
目录 1. 内存溢出和内存泄漏内存泄漏的常见场景解决内存溢出的思路1.发现问题 – Top命令2.发现问题 – VisualVM3.发现问题 – Arthas4.发现问题 – Prometheus Grafana5.发现问题 – 堆内存状况的对比
《凤凰项目》读书笔记
文章目录 一、书名和作者二、书籍概览2.1 主要论点和结构2.2 目标读者和应用场景 三、核心观点与主题3.1 DevOps的核心原则与文化变革3.2 持续交付与自动化3.3 变更管理与风险控制3.4 关键绩效指标与持续改进 四、亮点与启发4.1 最有影响的观点4.2 对个人专业发展的启示 五、批…...

熬夜会秃头——beta冲刺Day4
这个作业属于哪个课程2301-计算机学院-软件工程社区-CSDN社区云这个作业要求在哪里团队作业—beta冲刺事后诸葛亮-CSDN社区这个作业的目标记录beta冲刺Day4团队名称熬夜会秃头团队置顶集合随笔链接熬夜会秃头——Beta冲刺置顶随笔-CSDN社区 一、团队成员会议总结 1、成员工作进…...

HTML5+CSS3+Vue小实例:浪漫的心形文字动画特效
实例:浪漫的心形文字动画特效 技术栈:HTML+CSS+Vue 效果: 源码: 【HTML】 <!DOCTYPE html> <html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"><meta name="viewport" conte…...

数据结构-基数排序
基数排序 基本思想 基数排序其实就是依靠多位关键字进行排序,现在我们有一个数据为101,那么“101”就是一个三位 关键字,分别为:“百位->1”、“十位->0”、“个位->1”。 此时我们就可以按照三位关键字进行排序&…...

基于ASP.NET MVC技术的图书管理系统的设计与实现
基于ASP.NET MVC技术的图书管理系统的设计与实现 摘要:图书管理系统是一套高新科学技术和图书知识信息以及传统历史文化完美结合的体现。它改变了传统图书收藏的静态书本式图书服务特征,实现了多媒体存取、远程网络传输、智能化检索、跨库无缝链接、创造…...

C++17中的结构化绑定
C17中的结构化绑定(structured binding):将指定名称绑定到初始化程序的子对象或元素。简而言之,它们使我们能够从元组或结构中声明多个变量。与引用一样,结构化绑定是现有对象的别名;与引用不同,结构化绑定不必是引用类型(referen…...

Mover Creator 用户界面
1 “开始”对话框 首次打开 Mover Creator 时,出现的第一个页面是“开始”对话框,如下所示。从这里开始,用户可以选择开始设计飞机、武器或发动机。在上述每种情况下,用户都可以创建新模型或编辑现有模型。 1.1 新建模型 如果用…...

『Nginx安全访问控制』利用Nginx实现账号密码认证登录的最佳实践
📣读完这篇文章里你能收获到 如何创建用户账号和密码文件,并生成加密密码配置Nginx的认证模块,实现基于账号密码的登录验证 文章目录 一、创建账号密码文件1. 安装htpasswd工具1.1 CentOS1.2 Ubuntu 二、配置Nginx三、重启Nginx 在Web应用程…...

MongoDB导入导出命令
(1)mongoexport命令 例如: mongoexport --db testdb --collection person --out person.json mongoexport --db testdb --collection person --fields name,age --out person.json mongoexport --db testdb --collection person --query {&qu…...

软件工程期末复习(1)
学习资料 软件工程知识点总结_嘤桃子的博客-CSDN博客 软件工程学习笔记_软件工程导论第六版张海藩pdf-CSDN博客 【软件工程】软件工程期末试卷习题课讲解!!_哔哩哔哩_bilibili 【拯救者】软件工程速成(期末考研复试软考)均适用. 支持4K_哔哩哔哩_bil…...