当前位置: 首页 > news >正文

19. Python 数据处理之 Pandas

目录

    • 1. 认识 Pandas
    • 2. 安装和导入 Pandas
    • 3. Pandas 数据结构
    • 4. Pandas 基本功能
    • 5. Pandas 数据分析

1. 认识 Pandas

Pandas 是 Python 的核心数据分析支持库,提供了快速、灵活、明确的数据结构,旨在简单、直观地处理关系型、标记型数据。

Pandas 的出现主要是为了解决其他编程语言、科研环境的痛点。它是处理数据的理想工具,处理数据的速度极快,使数据预处理、清洗、分析工作变得更快、更简单,被广泛应用于金融领域。处理数据一般分为3个阶段:数据整理与清洗、数据分析与建模、数据可视化与制表

Pandas 是基于 Numpy 数组构建的,科研与其他第三方科学计算支持完美集成,专门为处理表格和混杂数据而设计,而Numpy更适合处理统一的数值和数组数据。

Pandas 适用于处理以下类型的数据:

  • 与SQL或Excel表类似的表格数据。
  • 有序和无序(非固定频率)的时间序列数据。
  • 带行列标签的矩阵数据,包括同构或异构型数据。
  • 任意其他形式的观测、统计数据集,数据转入Pandas数据结构时不必事先标记。

2. 安装和导入 Pandas

推荐使用Anaconda安装,可以参考 Anaconda 安装配置,轻轻松松上手Python安装Anaconda,然后使用以下命名安装和导入Pandas:

# 安装Pandas
'''Windows 按住win+R 输入 cmd,Mac 打开Terminal
conda install Pandas
pip install Pandas 
'''
import pandas as pd # 导入pandas并取别名
print(pd.__version__) # 1.5.1

3. Pandas 数据结构

Pandas 定义了两种主要数据结构:Series 和 DataFrame。

1) Series

Series 是一种类似于一维数组的对象,它由一组数据(各种Numpy数据类型)以及一组与之相映射的数据标签(索引)组成,即index和values两部分,可以通过索引的方式选取Series中单个或一组值。创建Series数据的语法格式如下:

pd.Series(list,index=[])

第一个参数可以是list、ndarray,也可以是DataFrame中的某一行或某一列。第二个参数是Series中数据的索引,可以省略,如果第一个参数是字典,则字典的键将作为Series的索引。

import numpy as np,pandas as pd
arr1 = np.arange(3)
s1 = pd.Series(arr1)
print(s1)
''' 输出
0    0
1    1
2    2
dtype: int64
'''

由于没有数据指定索引,于是自动创建一个从0~N-1(N为数据长度)的整型索引。

Series 类型索引、切片、运算的操作类似于ndarray,也类似于Python字典类型的操作,包括保留字in操作、使用get()方法。Series 和 ndarray之间主要区别在于,Series 之间的操作根据索引自动对齐数据。

2) DataFrame

DataFrame 是一个表格型的数据类型,每列值类型可以不同,是最常用的Pandas对象。有行索引和列索引,可以被看作由Series组成的字典(共用同一个索引)。其中的数据是以一个或多个二维块存放的(而不是列表、字典或别的一维数据结构)。

创建DataFrame的语法格式和示例如下:

# 参数columns和index为指定的列、行索引
pd.DataFrame(data,columns=[],index=[])# 示例
import pandas as pd
data = {'state':['Ohio','Ohio','Ohio','Nevada','Nevada','Nevada'],'year':[2000,2001,2002,2001,2002,2003],'pop':[1.5,1.7,3.6,2.4,2.9,3.2]}
# 默认行列索引
df = pd.DataFrame(data)
print(df)
''' 输出state  year  pop
0    Ohio  2000  1.5
1    Ohio  2001  1.7
2    Ohio  2002  3.6
3  Nevada  2001  2.4
4  Nevada  2002  2.9
5  Nevada  2003  3.2
'''
# 指定行列索引
df = pd.DataFrame(data,columns=['year','state','pop','debt'],index=['one','two','three','four','five','six'])
print(df)
''' 输出year   state  pop debt
one    2000    Ohio  1.5  NaN
two    2001    Ohio  1.7  NaN
three  2002    Ohio  3.6  NaN
four   2001  Nevada  2.4  NaN
five   2002  Nevada  2.9  NaN
six    2003  Nevada  3.2  NaN
'''
# 嵌套字典,外层字典的键作为列,内层字典键作为行索引
import pandas as pd 
data = {'Nevada':{2001:2.4,2002:2.9},'Ohio':{2000:1.5,2001:1.7,2002:3.6}}
df = pd.DataFrame(data)
print(df)
''' 输出Nevada  Ohio
2001     2.4   1.7
2002     2.9   3.6
2000     NaN   1.5
'''

4. Pandas 基本功能

1) 数据索引

Series 和 DataFrame 的索引是index类型,index对象不可修改,可通过索引值标签获取目标数据,也可通过索引使序列或数据库的计算、操作实现自动化对齐。索引类型index的常用方法如下:

  • append(idx):连接另一个index对象,产生新的index对象。
  • diff(idx):计算差集,产生新的index对象。
  • intersetion(idx):计算交集。
  • union(idx):计算并集。
  • delete(loc):删除loc位置处的元素。
  • insert(loc,e):在loc位置增加一个元素。
import pandas as pd 
data = {'Nevada':{2001:2.4,2002:2.9},'Ohio':{2000:1.5,2001:1.7,2002:3.6}}
df = pd.DataFrame(data)
print(df.index) # Int64Index([2001, 2002, 2000], dtype='int64')
print(df.columns) # Index(['Nevada', 'Ohio'], dtype='object')

2) 索引、选取和过滤

可以通过df.loc[]和df.iloc[]操作。

# 语法
df.loc[行标签,列标签]  # 第二个参数为空时,查询单个或多行的所有列。查询多列多行,则两个参数用列表表示
df.iloc[行位置,列位置]
# 示例
import pandas as pd 
data = {'Nevada':{2001:2.4,2002:2.9},'Ohio':{2000:1.5,2001:1.7,2002:3.6}}
df = pd.DataFrame(data)
print(df)
''' 输出Nevada  Ohio
2001     2.4   1.7
2002     2.9   3.6
2000     NaN   1.5
'''
print(df.loc[2001,['Nevada','Ohio']]) 
print(df.iloc[0,:]) 
''' 输出
Nevada    2.4
Ohio      1.7
Name: 2001, dtype: float64
'''

3) 运算

  • 算术运算。根据行列索引,对齐后运算,运算默认产生浮点数,对齐时缺项填充NaN(空值)。除了可以使用+、-、*、/外,还可以使用Series 和DataFrame的算术方法,如add、sub、mul、div。
  • 比较运算。只能比较相同索引的元素,不进行补齐,产生布尔值。

4) 排序

在排序时,任何缺失值默认都被放到末尾。

.sort_index(axis=0,ascending=True)

根据指定轴索引的值进行排序。默认轴axis=0,ascending=True,即默认根据0轴的索引值做升序。轴axis=1为根据1轴的索引值排序,ascending=False为降序。

  • Series.sort_values(axis=0,ascending=True):只能根据0轴的值排序。
  • DataFrame.sort_values(by,axis=0,ascending=True):参数by为axis轴上的某个索引或索引列表。

5. Pandas 数据分析

1) 统计分析和相关分析

适用于Series和DataFrame的基本统计分析函数如下,如果传入axis='columns’或axis=1将按行进行运算。

  • .describe():针对各列的多个统计汇总,用统计学指标快速描述数据的概要。
  • .sum():计算各列数据的和。
  • .count():计算非NaN值的数量。
  • .mean()/.median():计算数据的算术平均值、算术中位数。
  • .var()/.std():计算数据的方差、标准差。
  • .corr()/.cov():计算相关系数矩阵、协方差矩阵。
  • .corrwith():计算其列或行跟另一个Series或DataFrame之间的相关系数。
  • .min()/.max():计算数据的最小值、最大值。
  • .diff():计算一阶差分,对时间序列很有效。
  • .mode():计算众数,返回频数最高的那几个。
  • .quantile():计算分位数
  • .isin():用于判断矢量化集合的成员资格。
  • .unique():返回一个Series中唯一值组成的数值。
  • .value_counts():计算一个Series中各值出现的频率。
  • .argmin()/.argmax():计算数据最小值、最大值所在位置的索引位置。
  • .idxmin()/.idxmax():计算数据最小值、最大值所在位置的索引。

2) 分组

  • DataFrame.groupby():分组函数。
  • pandas.cut():根据数据分析对象的特征,按照一定的数值指标,把数据分析对象划分为不同的区间部分进行研究,以揭示其内在的联系和规律。

3) Pandas 读写文本格式的数据

  • read_csv:从文件、url、文件型对象中加载带分隔符的数据。默认分隔符为逗号。
  • read_table:从文件、url、文件型对象中加载带分隔符的数据。默认分隔符为制表符(’\t’)。
  • read_fwf:读取定宽格式数据(没有分隔符)。
  • read_clipboard:读取剪贴板中的数据,可以看作read_table的剪贴板。在将网页转换为表格时使用。
  • read_excel:从Excel XLS或XLSX file读取表格数据。
  • read_hdf:读取Pandas编写的HDF5文件。
  • read_html:读取HTML文档中的所有表格。
  • read_json:读取json字符串中的数据。
  • read_msgpack:二进制格式编码的Pandas数据。
  • read_pickle:读取Python pickle格式中存储的任意对象。
  • read_sas:读取存储于SAS系统自定义存储的任意对象。
  • read_sql:读取SQL查询结果为Pandas的DataFrame。
  • read_stata:读取Stata文件格式的数据集。
  • read_feather:读取Feather二进制文件格式。

这些函数的选项可以划分为以下几大类:

  • 索引:将一个或多个列当作返回的DataFrame处理,以及是否从文件、用户获取列名。
  • 类型推断和数据转换:包括用户自定义值的转换、自定义的缺失值标记列表等。
  • 日期解析:包括组合功能,如将分散在多个列的日期时间信息组合成结果中的单个列。
  • 迭代:支持对大文件中逐块迭代。
  • 不规范数据问题:跳过一些行、页脚、注释或其他一些不重要的东西。

4) 数据清洗和准备:数据分析和建模,大部分时间都用在数据准备上,如加载、清洗、转换以及重塑。

5) 处理缺失数据

在数据分析中缺失数据经常发生,对于数值数据,NaN(np.nan)表示缺失数据,也可将缺失值表示NA。常用函数如下:

  • .info():查看数据的信息,包括每个字段的名称、非空数量、字段的数据类型。
  • .isnull():返回一个同样长度的值为布尔型的对象,表示哪些值时缺失的。.notnull()为其否定形式。
  • .dropna():删除缺失数据。默认删除含有缺失值的行;如果想删除含有缺失值的列,需要传入axis = 1 作为参数;如果想要删除全部缺失值的行或列,需传入how=‘all’。
  • .fillna(value, method,limit,inplace):填充缺失值。value 用于填充的值或字典({‘列2’:1,‘列2’:8,…});method 默认为ffill(向前填充),bfill(向后填充);limit为向前或者向后填充的最大填充量;inplace 默认返回新对象,修改inplace=True可以对现有对象直接修改。

6) 数据转换

  • 替换值。.replace(old, new)函数可以使用新得数据替换老的数据。
  • 删除重复数据。.duplicated()可以判断各行是否是重复行;.drop_duplicates()可以删除重复行,返回删除后的DataFrame对象。
  • 利用函数或字典进行数据转换。Series.map()可以接受一个函数或字典作为参数,实现元素级转换以及其他数据清洗工作的便捷方式。
import pandas as pd 
data = pd.DataFrame({'food':['bacon','pulled pork','bacon','ppastrami','corned beef','bacon','pastrami','honey ham','noba lox'],'ounces':[4,3,12,6,7.5,8,3,5,6]})
meat_to_animal = {'bacon':'pig','pulled pork':'pig','pastrami':'cow','corned beef':'cow','honey ham':'pig','nova lox':'salmon'}
data['animal'] = data['food'].map(meat_to_animal) # 增加一列 animal
print(data)
''' 输出food  ounces animal
0        bacon     4.0    pig
1  pulled pork     3.0    pig
2        bacon    12.0    pig
3    ppastrami     6.0    NaN
4  corned beef     7.5    cow
5        bacon     8.0    pig
6     pastrami     3.0    cow
7    honey ham     5.0    pig
8     noba lox     6.0    NaN
'''

DataFrame 常用函数如下:

  • df.head():查询数据的前5行。
  • df.tail():查询数据的末尾5行。
  • pandas.cut()、pandas.qcut():基于分位数的离散化函数。
  • pandas.date_range():返回一个时间索引。
  • df.apply():沿相应轴应用函数。
  • Series.value_counts():返回不同数据的计数值。
  • df.aggregate()、df.reset_index():重新设置index。

相关文章:

19. Python 数据处理之 Pandas

目录 1. 认识 Pandas2. 安装和导入 Pandas3. Pandas 数据结构4. Pandas 基本功能5. Pandas 数据分析 1. 认识 Pandas Pandas 是 Python 的核心数据分析支持库,提供了快速、灵活、明确的数据结构,旨在简单、直观地处理关系型、标记型数据。 Pandas 的出…...

【计网 可靠数据传输RDT】 中科大笔记 (十 一)

目录 0 引言1 RDT的原理RDT的原理: 2 RDT的机制与作用2.1 重要协议停等协议(Stop-and-Wait):连续ARQ协议: 2.2 机制与作用实现机制:RDT的作用: 🙋‍♂️ 作者:海码007📜 专栏&#x…...

ubuntu下训练自己的yolov5数据集

参考文档 yolov5-github yolov5-github-训练文档 csdn训练博客 一、配置环境 1.1 安装依赖包 前往清华源官方地址 选择适合自己的版本替换自己的源 # 备份源文件 sudo cp /etc/apt/sources.list /etc/apt/sources.list_bak # 修改源文件 # 更新 sudo apt update &&a…...

ROC及曲线面积汇总学习

目录 ROC基础 生成模拟数据 率的计算 R语言计算测试 ROCR: pROC ROC绘制 单个ROC 两个ROC Logistic回归的ROC曲线 timeROC ROC基础 ROC曲线的横坐标是假阳性率,纵坐标是真阳性率,需要的结果是这个率表示疾病阳性的率(…...

LeetCode Hot100 35.搜索插入位置

题目: 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 方法:灵神 二分查找 闭区间写法 c…...

Android frameworks 开发总结之八

Quick Settings增加一項 XXX device要求在quick settings中增加一項touch panel. 在/frameworks/base/packages/SystemUI/res/values/config.xml文件中的quick_settings_tiles_default string 中增加touch panel。並在String resource文件中增加顯示的title <!-- The def…...

Cortex-M与RISC-V区别

环境 Cortex-M以STM32H750为代表&#xff0c;RISC-V以芯来为代表 RTOS版本为RT-Thread 4.1.1 寄存器 RISC-V 常用汇编 RISC-V 关于STORE x4, 4(sp)这种寄存器前面带数字的写法&#xff0c;其意思为将x4的值存入sp4这个地址&#xff0c;即前面的数字表示偏移的意思 反之LOA…...

YashanDB入选2023年世界互联网大会领先科技奖成果集《科技之魅》

近日&#xff0c;由深圳计算科学研究院自主研发的“崖山数据库系统YashanDB”入编2023年世界互联网大会领先科技奖成果集《科技之魅》。此次入选&#xff0c;充分彰显了YashanDB在数据库技术领域的突破性创新成果。 《科技之魅》是世界互联网大会领先科技奖的重要成果&#xff…...

C语言基础程序设计题

1.个人所得税计算 应纳税款的计算公式如下&#xff1a;收入<&#xff1d;1000元部分税率为0&#xff05;&#xff0c;2000元>&#xff1d;收入>1000元的部分税率为5&#xff05;&#xff0c;3000元>&#xff1d;收入>2000元的部分税率为10&#xff05;&#xf…...

Spring Boot实现图片上传和展示

Spring Boot实现图片上传和展示 本文将介绍如何使用Spring Boot框架搭建后端服务&#xff0c;实现接收前端上传的图片并保存到resources/images目录下。同时&#xff0c;我们还将展示如何在前端编写一个HTML页面&#xff0c;实现上传图片和从resources/images目录下获取图片并…...

大数据-之LibrA数据库系统告警处理(ALM-37015 Gaussdb进程可用文件句柄资源不足)

告警解释 操作系统环境文件句柄不足时&#xff0c;产生该告警。 告警属性 告警ID 告警级别 可自动清除 37015 严重 是 告警参数 参数名称 参数含义 ServiceName 产生告警的服务名称 RoleName 产生告警的角色名称 HostName 产生告警的主机名 Instance 产生告警…...

大一学编程怎么学?刚接触编程怎么学习,有没有中文编程开发语言工具?

大一学编程怎么学&#xff1f;刚接触编程怎么学习&#xff0c;有没有中文编程开发语言工具&#xff1f; 1、大一刚开始学编程&#xff0c;面对复杂的代码学习非常吃力&#xff0c;很难入门。建议刚接触编程可以先学习中文编程&#xff0c;了解其中的编程逻辑&#xff0c;学编程…...

GoWeb学习-第二天

文章目录 从零开始学Go web——第二天一、安装Go语言二、建立web目录2.1 创建GO语言包目录2.2 创建Go web文件 三、编译并运行Go web应用3.1 编译并运行3.2 查看结果 从零开始学Go web——第二天 ​ 第一天我们了解了与web息息相关的HTTP协议&#xff0c;聊了聊Go与web的关系等…...

04-鸿蒙4.0学习之样式装饰器相关

04-鸿蒙4.0学习之样式装饰器 styles装饰器&#xff1a;定义组件重用样式 /*** styles装饰器&#xff1a;定义组件重用样式*/ Entry Component struct StyleUI {State message: string stylesStyles commonStyle(){.width(200).height(100).backgroundColor(Color.Gray).marg…...

C# 线程(1)

目录 1 线程与进程2 创建线程3 线程等待4 线程优先级5 前台线程与后台线程6 Lock与线程安全7 Monitor8 死锁9 线程中异常处理 1 线程与进程 进程是计算机概念&#xff0c;一个程序运用时占用的的所有计算机资源&#xff08;CPU、内存、硬盘、网络&#xff09;统称为进程。 线程…...

冒泡排序以及改进方案

冒泡排序以及改进方案 介绍&#xff1a; 冒泡排序属于一种典型的交换排序&#xff08;两两比较&#xff09;。冒泡排序就像是把一杯子里的气泡一个个往上冒一样。它不断比较相邻的元素&#xff0c;如果顺序不对就像水泡一样交换它们的位置&#xff0c;直到整个序列像水泡一样…...

QTextEdit 是 Qt 框架中的一个类,用于显示和编辑多行文本内容的可编辑部件

QTextEdit 是 Qt 框架中的一个类&#xff0c;用于显示和编辑多行文本内容的可编辑部件。 QTextEdit 提供了一个用于显示和编辑富文本&#xff08;包括格式化文本、图像和链接等&#xff09;和纯文本的文本编辑器。它支持基本的文本操作&#xff08;如复制、粘贴、撤销、重做等…...

vue+jsonp编写可导出html的模版,可通过外部改json动态更新页面内容

效果 导出后文件结果如图所示&#xff0c;点击Index.html即可查看页面&#xff0c;页面所有数据由report.json控制&#xff0c;修改report.json内容即可改变index.html展示内容 具体实现 1. 编写数据存储的json文件 在index.html所在的public页面新建report.json文件&#xff…...

查看各ip下的连接数

netstat -n | awk /^tcp/ {print $5} | awk -F: {print $1} | sort | uniq -c| sort -rn netstat -n&#xff1a;显示所有的网络连接&#xff0c;不包括任何服务名的解释。awk /^tcp/ {print $5}&#xff1a;使用awk命令过滤出tcp协议的连接&#xff0c;并打印出每个连接的第五…...

Linux—进程状态

目录 一.前言 1.1.通过系统调用获取进程标示符 1.2.通过系统调用创建进程 二.进程状态 三.Z(zombie)-僵尸进程 四.僵尸进程危害 一.前言 学习进程的状态&#xff0c;我们首先了解一下进程的基本数据 1.1.通过系统调用获取进程标示符 由getpid&#xff08;&#xff09…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》

引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...

MVC 数据库

MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

聊一聊接口测试的意义有哪些?

目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开&#xff0c;首…...

Java面试专项一-准备篇

一、企业简历筛选规则 一般企业的简历筛选流程&#xff1a;首先由HR先筛选一部分简历后&#xff0c;在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如&#xff1a;Boss直聘&#xff08;招聘方平台&#xff09; 直接按照条件进行筛选 例如&#xff1a…...

dify打造数据可视化图表

一、概述 在日常工作和学习中&#xff0c;我们经常需要和数据打交道。无论是分析报告、项目展示&#xff0c;还是简单的数据洞察&#xff0c;一个清晰直观的图表&#xff0c;往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server&#xff0c;由蚂蚁集团 AntV 团队…...

GitFlow 工作模式(详解)

今天再学项目的过程中遇到使用gitflow模式管理代码&#xff0c;因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存&#xff0c;无论是github还是gittee&#xff0c;都是一种基于git去保存代码的形式&#xff0c;这样保存代码…...

【Linux】Linux 系统默认的目录及作用说明

博主介绍&#xff1a;✌全网粉丝23W&#xff0c;CSDN博客专家、Java领域优质创作者&#xff0c;掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围&#xff1a;SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...

第一篇:Liunx环境下搭建PaddlePaddle 3.0基础环境(Liunx Centos8.5安装Python3.10+pip3.10)

第一篇&#xff1a;Liunx环境下搭建PaddlePaddle 3.0基础环境&#xff08;Liunx Centos8.5安装Python3.10pip3.10&#xff09; 一&#xff1a;前言二&#xff1a;安装编译依赖二&#xff1a;安装Python3.10三&#xff1a;安装PIP3.10四&#xff1a;安装Paddlepaddle基础框架4.1…...

解析两阶段提交与三阶段提交的核心差异及MySQL实现方案

引言 在分布式系统的事务处理中&#xff0c;如何保障跨节点数据操作的一致性始终是核心挑战。经典的两阶段提交协议&#xff08;2PC&#xff09;通过准备阶段与提交阶段的协调机制&#xff0c;以同步决策模式确保事务原子性。其改进版本三阶段提交协议&#xff08;3PC&#xf…...

客户案例 | 短视频点播企业海外视频加速与成本优化:MediaPackage+Cloudfront 技术重构实践

01技术背景与业务挑战 某短视频点播企业深耕国内用户市场&#xff0c;但其后台应用系统部署于东南亚印尼 IDC 机房。 随着业务规模扩大&#xff0c;传统架构已较难满足当前企业发展的需求&#xff0c;企业面临着三重挑战&#xff1a; ① 业务&#xff1a;国内用户访问海外服…...