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。

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

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

相关文章

HarmonyOS应用开发者基础认证【题库答案】

HarmonyOS应用开发者高级认证【题库答案】 一、判断 首选项preferences是以Key-Value形式存储数据,其中Key是可以重复。(错)使用http模块发起网络请求时,必须要使用on(‘headersReceive’)订阅请求头,请…

一、Spring_IOCDI(1)

🌻🌻 目录 一、前提介绍1.1 为什么要学?1.2 学什么?1.3 怎么学? 二、Spring相关概念2.1 初始Spring2.1.1 Spring家族2.1.2 了解 Spring 发展史 2.2 Spring系统架构2.2.1 系统架构图2.2.2 课程学习路线 2.3 Spring核心概念2.3.1 目前项目中的问题2.3.2…

JBase到JRT

JBase之前是站在之前基础上新做的java框架。所以带入一些老的历史习惯,比如库和空间都以LIS开头,实体只能是LIS.Model等。为了做到更通用的框架,需要剔除LIS特性,实体肯定不能只能叫LIS.Model了。同时之前只关注业务脚本化的事忘了…

2023年程序设计迎新赛(第二届个人程序设计大赛)

7-1 找规律 请从所给的四个选项中&#xff0c;选择最合适的一个填入问号处&#xff0c;使之呈现一定的规律性。 输入格式: 无 输出格式: 大写字母 输入样例: 输出样例: #include<stdio.h> int main(){printf("D");return 0; }7-2 蜡烛燃烧时间 有粗细不同…

react项目自行配置热更新

react项目自己配置热更新的话需要安装两个包pmmmwh/react-refresh-webpack-plugin和react-refresh&#xff0c;这个是官方推荐的做法。下面给出一个完整demo App.js import React, { useState } from "react";function App() {const [count, setCount] useState(0…

【推荐系统】MMOE笔记 20231126

paper阅读 任务差异带来的固有冲突实际上会损害至少某些任务的预测&#xff0c;特别是当模型参数在所有任务之间广泛共享时。&#xff08;在说ESMM&#xff09; 共享底层参数可以减少过拟合风险&#xff0c;但是会遇到任务差异引起的优化冲突&#xff0c;因为所有任务都需要在…

MySQL的undo log 与MVCC

文章目录 概要一、undo日志1.undo日志的作用2.undo日志的格式3. 事务id&#xff08;trx_id&#xff09; 二、MVCC1.版本链2.ReadView3.REPEATABLE READ —— 在第一次读取数据时生成一个ReadView4.快照读与当前读 小结 概要 Undo Log&#xff1a;数据库事务开始之前&#xff0…

【nowcoder】BM4 合并两个排序的链表

题目&#xff1a; 题目分析&#xff1a; 题目分析转载 代码实现&#xff1a; package BMP4;import java.util.List;class ListNode {int val;ListNode next null;public ListNode(int val) {this.val val;} } public class BM4 {/*** 代码中的类名、方法名、参数名已经指定…

C语言中文网 - Shell脚本 - 10 - 第一个Shell脚本

第1章 Shell基础&#xff08;开胃菜&#xff09; 10. 第一个Shell脚本 几乎所有编程语言的教程都是从使用著名的“Hello World”开始的&#xff0c;出于对这种传统的尊重&#xff08;或者说落入俗套&#xff09;&#xff0c;我们的第一个 Shell 脚本也输出“Hello World”。 打…

记一次Kotlin Visibility Modifiers引发的问题

概述 测试环境爆出ERROR告警日志java.lang.IllegalStateException: Didnt find report for specified language&#xff0c;登录测试环境ELK查到如下具体的报错堆栈日志&#xff1a; java.lang.IllegalStateException: Didnt find report for specified language at com.aba.…

数组栈的实现

1.栈的概念及结构 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作 进行数据插入和删除操作的一端称为栈顶&#xff0c;另一端称为栈底 栈中的数据元素遵守后进先出LIFO,&#xff08;Last In First Out&#xff09;的原则 压栈&…

如何将 Python 运用到实际的测试工作中

1、自动化测试脚本编写&#xff1a; Python广泛用于编写自动化测试脚本&#xff0c;以执行各种测试任务。可以使用Selenium、Appium或PyTest等库来辅助测试脚本的编写。 下面是一个示例&#xff1a; from selenium import webdriver import unittestclass LoginTest(unittes…

[网络] 字节一面~ 2. HTTP 2 与 HTTP 1.x 有什么区别

头部压缩 在 HTTP2 当中&#xff0c;如果你发出了多个请求&#xff0c;并且它们的头部(header)是相同的&#xff0c;那么 HTTP2 协议会帮你消除同样的部分。(其实就是在客户端和服务端维护一张索引表来实现)二进制格式 HTTP1.1 采用明文的形式 HTTP/2 全⾯采⽤了⼆进制格式&…

简析range和xrange的区别

在 Python 2 中&#xff0c;存在 range() 和 xrange() 两个函数&#xff0c;但在 Python 3 中&#xff0c;xrange() 已经被移除&#xff0c;只剩下了 range() 函数。 主要区别在于它们返回的对象类型不同&#xff1a; range() 返回的是一个列表对象&#xff0c;它直接生成一个…

【科技素养】蓝桥杯STEMA 科技素养组模拟练习试卷8

1、一家餐馆同时有四个顾客点单&#xff0c;他们点的菜分别需要 12&#xff0c;15&#xff0c;20 和 30分钟的准备时间。在一次只能准备一份菜的情况下&#xff0c;四个顾客的等待时间之和最小是&#xff08;&#xff09;分钟 A、128 B、192 C、282 D、163 答案&#xff1…

[JVM] 美团二面,说一下JVM数据区域

Java 虚拟机在执行 Java 程序的过程中会把它管理的内存划分成若干个不同的数据区域。这些区域有不同的用途。 文章目录 线程私有的数据区域1. 程序计数器2. Java 虚拟机栈3. 本地方法栈 线程共享的数据区域1. Java 堆2. 方法区3. 运行时常量池4. 直接内存 线程私有的数据区域 …

MIT 6.824 -- MapReduce Lab

MIT 6.824 -- MapReduce Lab 环境准备实验背景实验要求测试说明流程说明 实验实现GoLand 配置代码实现对象介绍协调器启动工作线程启动Map阶段分配任务执行任务 Reduce 阶段分配任务执行任务 终止阶段 崩溃恢复 注意事项并发安全文件转换golang 知识点 测试 环境准备 从官方gi…

鸿蒙开发-ArkTS 语言-状态管理

鸿蒙开发-ArkTS 语言-基础语法 3. 状态管理 变量必须被装饰器装饰才能成为状态变量&#xff0c;状态变量的改变才能导致 UI 界面重新渲染 概念描述状态变量被状态装饰器装饰的变量&#xff0c;改变会引起UI的渲染更新。常规变量没有状态的变量&#xff0c;通常应用于辅助计算…

C 文件 fprintf()和 fscanf()

C 文件 fprintf()和 fscanf() 写入文件&#xff1a;fprintf()函数 fprintf()函数用于将字符集写入文件。它将格式化的输出发送到流。 语法&#xff1a; int fprintf(FILE *stream, const char *format [, argument, ...])示例 #include <stdio.h> void main(){FILE…

案例026:基于微信的原创音乐小程序的设计与实现

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 小程序…