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       128
	Integer      12
	Float        24
	Boolean       3
	String      266
	Datetime     24
	Category    400
	dtype: int64

在这个例子中,memory_usage(deep=True) 会返回一个 Series,其中包含每列的内存使用情况。deep=True 会深入到对象中,对于字符串类型的列,会计算字符串的实际内存使用情况。

2.3. Pandas数据类型与python、numpy对比

Pandas dtypePython类型Numpy类型说明
objectstrstring_,unicode_用于文本
int64intint_,int8_,int16,int32,int64,uint8,uint16,uint32,uint64用于整数
float64floatfloat_,float16,float32,float64用于浮点数
boolboolbool_用于布尔值
datetime64NANA用于日期时间
timedelta[ns]NANA用于时间差
categoryNANA用于有限长度的文本值列表

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

序号函数含义
1min()计算最小值
2max()计算最大值
3sum()求和
4mean()计算平均值
5count()计数(统计非缺失元素的个数)
6size()计数(统计所有元素的个数)
7median()计算中位数
8var()计算方差
9std()
10quantile()计算任意分位数
11cov()计算协方差
12corr()计算相关系数
13skew()计算偏度
14kurt()计算峰度
15mode()计算众数
16describe()描述性统计(一次性返回多个统计结果)
17groupby()分组
18aggregate()聚合运算(可以自定义统计函数)
19argmin()寻找最小值所在位置
20argmax()寻找最大值所在位置
21any()等价于逻辑“或”
22all()等价于逻辑“与”
23value_counts()频次统计
24cumsum()运算累计和
25cumprod()运算累计积
26pct­­_change()运算比率(后一个元素与前一个元素的比率)

例如:

df[['Integer','Float']].pct_change()

在这里插入图片描述
统计函数是数据分析的核心内容之一,将 在后续内容中展开。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

树_对称二叉树

//给你一个二叉树的根节点 root , 检查它是否轴对称。 // // // // 示例 1: // // //输入:root [1,2,2,3,4,4,3] //输出:true // // // 示例 2: // // //输入:root [1,2,2,null,3,null,3] //输出…

JVM内存结构:StringTable与常量池关系

首先看一道题 这就涉及到StringTable和常量池,答案在文末,全做对就不用看了 而StringTable的位置在不同版本也有变化 , 我们只探讨jdk1.8版本 与StringTable 串池对应的是常量池 案例一、常量池和串池联系 引用所指肯定不会是常量池中的字…

vue3中如何实现事件总线eventBus

使用插件 由于vue3中 “$ on”,$ off 和 $ once 实例方法已被移除,组件实例不再实现事件触发接口 所以我们可以使用官方推荐的这个第三方库实现同样的效果 mitt https://github.com/developit/mitt 安装 pnpm install mitt -S挂载全局写法 main.ts 初始…

机械专业个人简历17篇

以下简历内容以机械专业相关岗位招聘需求为背景,我们整理了17篇且具有参考价值的简历案例,大家可以灵活借鉴,助理大家在众多候选人中脱颖而出。 机械专业简历模板下载(可在线编辑制作):来幻主简历&#xf…

使用python streamlit库快速创建一个购物网站

streamlit Streamlit 是一个基于 Python 的 Web 应用程序框架,致力于以更高效、更灵活的方式可视化数据,并分析结果。 Streamlit是一个开源库,可以帮助数据科学家和学者在短时间内开发机器学习 (ML) 可视化仪表板。只需几行代码&#xff0c…

封装了一个顺滑嵌套滚动的框架

首先查看效果图 就是开始滚动的时候,上面的头部和下面的内容是 一起滚动的,但是当滚动到segment 的时候,segment 是悬停 的,下面的tableView是分区的 架构设计 我们设计一个架构,以下面的tablView为主体&#xff0…

大数据湖项目建设方案:文档全文101页,附下载

关键词:大数据解决方案,数据湖解决方案,数据治理解决方案,数据中台解决方案 一、大数据湖建设思路 1、明确目标和定位:明确大数据湖的目标和定位是整个项目的基础,这可以帮助我们确定项目的内容、规模、所…

P3 Linux应用编程:系统调用与库函数

前言 🎬 个人主页:ChenPi 🐻推荐专栏1: 《C_ChenPi的博客-CSDN博客》✨✨✨ 🔥 推荐专栏2: 《Linux C应用编程(概念类)_ChenPi的博客-CSDN博客》✨✨✨ 🛸推荐专栏3: ​​​​​​《 链表_Chen…

Kubernetes入门学习(下)

Kubernetes入门学习(下) 文章目录 Kubernetes入门学习(下)运行有状态的应用ConfigMap与SecretConfigMapSecret 卷(Volume)StatefulSet(有状态应用集)Headless Service(无头服务)Mysql主从复制Port-forward端口转发Helm参考 运行有…

Java中异常处理顺序和全局异常处理器

异常处理顺序 我们直接通过代码看下Java中异常的处理顺序。 数组越界异常属于运行时异常,被捕捉后就停止了,打印结果为数组越界了。 Test public void test2(){int[] arr new int[4];try{System.out.println(arr[5]);}catch (ArrayIndexOutOfBoundsE…

2023.12.2 关于 Spring AOP 详解

目录 Spring AOP Spring AOP 常见使用场景 AOP 组成 切面(类) 切点(方法) 通知 ​编辑 前置通知(Before) 后置通知(After) 返回通知(AfterReturning&#xff0…

【接口测试】Apifox实用技巧干货分享

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

C# 使用HtmlAgilityPack解析提取HTML内容

写在前面 HtmlAgilityPack是一个HTML解析类库,日常用法就是爬虫获取到内容后,先用XPath获取目标节点,再用正则进行匹配;使用XPath的目的主要是将目标节点或内容限定在一个较小的范围,如果一上来就用正则那效率肯定不…

python——进程常用功能

Python的multiprocessing模块提供了强大的并行处理能力,以下是几个功能的详细解释: join(): 在multiprocessing中,join方法用于阻塞主进程直到指定的进程终止。这对于确保所有子进程在程序结束前完成其工作是很有用的。deamon(): 在multipro…

讲一讲redis的使用

Redis(Remote Dictionary Server)是一个开源的内存数据库系统,它提供了高性能、支持多种数据结构的存储和操作,被广泛应用于缓存、消息队列、计数器、实时分析等场景。以下是Redis的使用详解,涵盖了基本概念、数据结构…

目标检测常用评价指标

1 基本概念 1.1 IOU(Intersection over Union) 1.2 TP TN FP FN 2. 各种率 3. PR曲线 4. mAP的计算 4.1 AP的计算 4.2 mAP 4.3 mAP0.5和mAP0.5:0.95 1.1 IOU(Intersection over Union) 1.2 TP TN FP FN TP(Truth Positive): 预测正类,实际正类&#x…

2022CVPR(PoseC3D):Revisiting Skeleton-based Action Recognition

Revisiting Skeleton-based Action Recognition 摘要1、引言2、相关工作3、框架3.1. 姿势提取的良好实践3.2.从2D姿势到3D热图体积3.3.基于骨架的动作识别的3D-CNN 4、实验4.2.姿势提取4.3. 3D热图体积的预处理4.4.与GCN的比较4.5. RGBPose-SlowFast4.6.与最先进的比较 5、结论…

糟了,数据库崩了,又好像没崩

前言 2023 年某一天周末,新手程序员小明因为领导安排的一个活来到公司加班,小明三下五除二,按照领导要求写了一个跑批的数据落库任务在测试环境执行 ,突然间公司停电了,小明大惊,“糟了,MySQL …

wordpress建站优化加速教程-Redis加速

这篇文章适合宝塔面板,在宝塔面板安装 Redis 实现网站加速( Redis是一个高性能的key-value数据库(PHP连接redis,需PHP设置中安装redis扩展) )。对在word press网站有着明显的加速效果。关于Redis具体说明请自己百度,…

30岁左右的简历模板精选7篇

30岁左右是职业发展的关键时期,一份出色的简历能带来更多机会。本文精选了7篇适合30岁左右求职者的专业简历案例,无论您是寻找晋升、转行还是新的职业挑战,都能从中借鉴灵感,打造一份令人印象深刻的简历。 30岁左右的简历模板下载…