db2 replace函数的用法_高效的10个Pandas函数,你都用过吗?

2023-10-27

35b40453aa4cb7a5c95c239e20337a75.pngcb1adf1c1c9a58e3409ddfea365ea283.pngfb0c0a5747221a2176266672dd2a073d.png

作者|Soner Yıldırım

来源|towardsdatascience

翻译\编辑|Python大数据分析

Pandas是python中最主要的数据分析库之一,它提供了非常多的函数、方法,可以高效地处理并分析数据。让pandas如此受欢迎的原因是它简洁、灵活、功能强大的语法。

这篇文章将会配合实例,讲解10个重要的pandas函数。其中有一些很常用,相信你可能用到过。还有一些函数出现的频率没那么高,但它们同样是分析数据的得力帮手。

介绍这些函数之前,第一步先要导入pandas和numpy。

import numpy as np
import pandas as pd

1. Query

Query是pandas的过滤查询函数,使用布尔表达式来查询DataFrame的列,就是说按照列的规则进行过滤操作。

用法:

pandas.DataFrame.query(self, expr, inplace = False, **kwargs)

参数作用:

  • expr:要评估的查询字符串;
  • inplace=False:查询是应该修改数据还是返回修改后的副本
  • kwargs:dict关键字参数

首先生成一段df:

values_1 = np.random.randint(10, size=10)
values_2 = np.random.randint(10, size=10)
years = np.arange(2010,2020)
groups = ['A','A','B','A','B','B','C','A','C','C']
df = pd.DataFrame({'group':groups, 'year':years, 'value_1':values_1, 'value_2':values_2})
df
ce90d1cb66e9b2b8c1afc6545ad5616a.png

过滤查询用起来比较简单,比如要查列value_1<value_2的行记录:

df.query('value_1 )
b2977d0a27dec4dda71efc176807c621.png

查询列year>=2016的行记录:

df.query('year >= 2016 ')
2815ba4384647c9dc1fe1a0f899e9106.png

2. Insert

Insert用于在DataFrame的指定位置中插入新的数据列。默认情况下新列是添加到末尾的,但可以更改位置参数,将新列添加到任何位置。

用法:

Dataframe.insert(loc, column, value, allow_duplicates=False)

参数作用:

  • loc:  int型,表示插入位置在第几列;若在第一列插入数据,则 loc=0
  • column: 给插入的列取名,如 column='新的一列'
  • value:新列的值,数字、array、series等都可以
  • allow_duplicates: 是否允许列名重复,选择Ture表示允许新的列名与已存在的列名重复

接着用前面的df:5fa09bdb5c0e5813d374e345fee0bbbd.png

在第三列的位置插入新列:

#新列的值
new_col = np.random.randn(10)
#在第三列位置插入新列,从0开始计算
df.insert(2, 'new_col', new_col)
df
a852ea6423da434bcc6706065d542fa7.png

3. Cumsum

Cumsum是pandas的累加函数,用来求列的累加值。用法:

DataFrame.cumsum(axis=None, skipna=True, args, kwargs)

参数作用:

  • axis:index或者轴的名字
  • skipna:排除NA/null值

以前面的df为例,group列有A、B、C三组,year列有多个年份。我们只知道当年度的值value_1、value_2,现在求group分组下的累计值,比如A、2014之前的累计值,可以用cumsum函数来实现。

当然仅用cumsum函数没办法对groups (A, B, C)进行区分,所以需要结合分组函数groupby分别对(A, B, C)进行值的累加。

df['cumsum_2'] = df[['value_2','group']].groupby('group').cumsum()
df
3814e608a6503879747d34d9f3f5c5fd.png

4. Sample

Sample用于从DataFrame中随机选取若干个行或列。用法:

DataFrame.sample(n=None, frac=None, replace=False, weights=None, random_state=None, axis=None)

参数作用:

  • n:要抽取的行数
  • frac:抽取行的比例 例如frac=0.8,就是抽取其中80%
  • replace:是否为有放回抽样, True:有放回抽样 False:未放回抽样
  • weights:字符索引或概率数组
  • random_state :随机数发生器种子
  • axis:选择抽取数据的行还是列 axis=0:抽取行 axis=1:抽取列

比如要从df中随机抽取5行:

sample1 = df.sample(n=5)
sample1
8000a1fc8d838c2b5479b137bdb61dd5.png

从df随机抽取60%的行,并且设置随机数种子,每次能抽取到一样的样本:

sample2 = df.sample(frac=0.6,random_state=2)
sample2
bd42c6e3ed2f63652aa2caf25d4d1f97.png

5. Where

Where用来根据条件替换行或列中的值。如果满足条件,保持原来的值,不满足条件则替换为其他值。默认替换为NaN,也可以指定特殊值。

用法:

DataFrame.where(cond, other=nan, inplace=False, axis=None, level=None, errors='raise', try_cast=False, raise_on_error=None)

参数作用:

  • cond:布尔条件,如果 cond 为真,保持原来的值,否则替换为other
  • other:替换的特殊值
  • inplace:inplace为真则在原数据上操作,为False则在原数据的copy上操作
  • axis:行或列

将df中列value_1里小于5的值替换为0:

df['value_1'].where(df['value_1'] > 5 , 0)
33580c31178d1d004094887d4686b1f1.png

Where是一种掩码操作。

「掩码」(英语:Mask)在计算机学科及数字逻辑中指的是一串二进制数字,通过与目标数字的按位操作,达到屏蔽指定位而实现需求。

6. Isin

Isin也是一种过滤方法,用于查看某列中是否包含某个字符串,返回值为布尔Series,来表明每一行的情况。

用法:

Series.isin(values)
或者
DataFrame.isin(values)

筛选df中year列值在['2010','2014','2017']里的行:

years = ['2010','2014','2017']
df[df.year.isin(years)]
32891fe6706ff11eceae9d5ea335613f.png

7. Loc and iloc

Loc和iloc通常被用来选择行和列,它们的功能相似,但用法是有区别的。

用法:

DataFrame.loc[]
或者
DataFrame.iloc[]
  • loc:按标签(column和index)选择行和列
  • iloc:按索引位置选择行和列

选择df第1~3行、第1~2列的数据,使用iloc:

df.iloc[:3,:2]
e3050219d50c4177da98a6a921a7da7d.png

使用loc:

df.loc[:2,['group','year']]1
daa22201364a1026825de9048f099e31.png

提示:使用loc时,索引是指index值,包括上边界。iloc索引是指行的位置,不包括上边界。

选择第1、3、5行,year和value_1列:

df.loc[[1,3,5],['year','value_1']]
01e09a970a2e74354ba66c70a2c7ed6f.png

8. Pct_change

Pct_change是一个统计函数,用于表示当前元素与前面元素的相差百分比,两元素的区间可以调整。

比如说给定三个元素[2,3,6],计算相差百分比后得到[NaN, 0.5, 1.0],从第一个元素到第二个元素增加50%,从第二个元素到第三个元素增加100%。

用法:

DataFrame.pct_change(periods=1, fill_method=‘pad’, limit=None, freq=None, **kwargs)

参数作用:

  • periods:间隔区间,即步长
  • fill_method:处理空值的方法

对df的value_1列进行增长率的计算:

df.value_1.pct_change()
d83c39a429c653a03ffe4d67f4071e6a.png

9. Rank

Rank是一个排名函数,按照规则(从大到小,从小到大)给原序列的值进行排名,返回的是排名后的名次。

比如有一个序列[1,7,5,3],使用rank从小到大排名后,返回[1,4,3,2],这就是前面那个序列每个值的排名位置。

用法:

rank(axis=0, method: str = 'average', numeric_only: Union[bool, NoneType] = None, na_option: str = 'keep', ascending: bool = True, pct: bool = False)

参数作用:

  • axis:行或者列
  • method:返回名次的方式,可选{‘average’, ‘min’, ‘max’, ‘first’, ‘dense’}
    method=average 默认设置: 相同的值占据前两名,分不出谁是1谁是2,那么去中值即1.5,下面一名为第三名
    method=max: 两人并列第 2 名,下一个人是第 3 名
    method=min: 两人并列第 1 名,下一个人是第 3 名
    method=dense: 两人并列第1名,下一个人是第 2 名
    method=first: 相同值会按照其在序列中的相对位置定值
  • ascending:正序和倒序

对df中列value_1进行排名:

df['rank_1'] = df['value_1'].rank()
df
422328e0de4aca73ae4731a53d9fdff8.png

10. Melt

Melt用于将宽表变成窄表,是 pivot透视逆转操作函数,将列名转换为列数据(columns name → column values),重构DataFrame。

简单说就是将指定的列放到铺开放到行上变成两列,类别是variable(可指定)列,值是value(可指定)列。

56b3e3b90aac6df6528a630c110cf1a1.png

用法:

pandas.melt(frame, id_vars=None, value_vars=None, var_name=None, value_name='value', col_level=None)

参数作用:

  • frame:它是指DataFrame
  • id_vars [元组, 列表或ndarray, 可选]:不需要被转换的列名,引用用作标识符变量的列
  • value_vars [元组, 列表或ndarray, 可选]:引用要取消透视的列。如果未指定, 请使用未设置为id_vars的所有列
  • var_name [scalar]:指代用于”变量”列的名称。如果为None, 则使用- - frame.columns.name或’variable’
  • value_name [标量, 默认为’value’]:是指用于” value”列的名称
  • col_level [int或string, 可选]:如果列为MultiIndex, 它将使用此级别来融化

例如有一串数据,表示不同城市和每天的人口流动:

import pandas as pd
df1 = pd.DataFrame({'city': {0: 'a', 1: 'b', 2: 'c'},
                     'day1': {0: 1, 1: 3, 2: 5},
                     'day2': {0: 2, 1: 4, 2: 6}})
df1
305e14d291de55a00081470981ef9b48.png

现在将day1、day2列变成变量列,再加一个值列:

pd.melt(df1, id_vars=['city'])
2621f796351f0a476a563de120e1ca88.png
一起学Java
一起学Python------------------如果觉得文章有点用的话,请毫不留情地素质三连吧,分享、点赞、在看、收藏,我不挑,因为这将是我写作更多优质文章的最强动力。

往期精选(

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

db2 replace函数的用法_高效的10个Pandas函数,你都用过吗? 的相关文章

  • 帝国cms【官方教程系列教程一】 首页模板制作

    帝国cms首页模板是指网站首页的模板 index html 修改首页模板 1 登录后台 单击 模板 菜单 选择 首页模板 子菜单 进入修改首页模板界面 2 进入修改首页模板界面 3 首页模板支持的变量说明 news url 网站地址 参数设
  • 存储器系统课后习题参考答案

    1 解释概念 主存 辅存 Cache RAM SRAM DRAM ROM PROM EPROM EEPROM CDROM Flash Memory 答 主存 主存储器 用于存放正在执行的程序和数据 CPU可以直接进行随机读写 访问速度较高
  • MySQL 哈希索引、空间数据索引、全文索引

    1 哈希索引 哈希索引基于哈希表实现 仅支持精确匹配索引所有列的查询 对于每行数据 存储引擎都会对所有的索引列计算出一个哈希码 哈希索引将所有的哈希码存储在索引中 同时保存指向每个数据行的指针 1 1 存储结构 常见的存储引擎中 MEMOR
  • DateUtil 工具类整理一些自己用到过得,有点逻辑处理的方法

    获取当前的年分 return public static int getSeasonId Calendar cal Calendar getInstance return cal get Calendar YEAR 获得本周一与当前日期相差
  • 硬件系统工程师宝典(19)-----原理图封装库,你画对了吗?

    各位同学大家好 欢迎继续做客电子工程学习圈 今天我们继续来讲这本书 硬件系统工程师宝典 上篇我们说到PCB制造过程中 不同的焊接工艺 布局元器件之间的距离要满足不同的要求 PCB走线时要从焊盘中心走线并且宽度小于焊盘宽度 以及丝印排布的建议
  • OpenAI 选择这家成立2年的8人团队做什么?

    当地时间 8 月 16 日 OpenAI 发布公告称收购了 Global Illumination 的团队 此笔交易更成为 OpenAI 自 2015 年成立以来首次对外收购 但并未公开交易涉及金额 据悉 该团队将参与 OpenAI 核心产
  • Win10竟然内置了一台虚拟机

    第一步 打开win10自带的虚拟机Hyper V 需要 win10系统 1 点击windows键 e键打开文件资源管理器 右击此电脑 gt 选择属性 gt 打开控制面板 2 选择控制面板主页 gt 选择程序与功能 3 点击启用或关闭Wind
  • 入住倒计时

    经过辛辛苦苦的三个月的时间 房子总算硬装结束 入住时间也排上了日程 查了查老黄历 西历2008 09 14即公历8月15 中国的中秋节 日子不错 是入住的黄道吉日 准备买点鞭炮小热闹一下 一来冲冲三个月来的劳累 烦躁的情绪 二来也算献给一期
  • springboot-配置类学习

    开发SpringBoot应用时经常涉及到配置文件 平时只是知道使用 ConfigurationProperties来注解类 或者使用 Value来获取配置值 通过 EnableConfigurationProperties来将配置类作为be
  • [正能量系列]失业的程序员(二)

    http blog csdn net shenyisyn article details 8634185 闹钟响 迷迷糊糊的我砸了一下开关 竟然把闹钟砸坏了 昨天接到学姐的电话 说是帮我介绍了一个钢管制造厂企业型宣传网站的业务 难度不大主要
  • 第六十六篇 三种常见的电路输出OC/OD和推挽

    1 OC输出 集电极开路输出 所谓OC就是open collector 字面理解就是collector极开路状态 既是集电极什么负载都不接 保持开路状态 在集电极开路输出OC结构电路中 类似上图 如果Q2断开的话 那么输出OC门的状态不可知
  • elementui中的tree组件相关操作集合

    目录 1 刷新指定节点 2 自定义过滤方法 3 新增子节点 4 编辑节点名 5 拖拽节点 6 某节点高亮 7 总结 8 组件整体的代码 1 刷新指定节点 node节点有一个loaded的属性 用来存储该节点是否展开过 刷新指定节点的思路 无
  • How to use appreciation and lie

    appreciation 1 理解 同情 体谅 I had no apprecation of the prombles you faced 我没有体谅到你当前所面临的困难 2 感谢 感谢 Please accept this gift i
  • PowerShell混淆相关

    相关技术文章 2016 05 26 利用机器学习检测恶意PowerShell https bbs pediy com thread 230002 htm 2018 11 09 FireEye 基于机器学习的模糊命令行检测 https www
  • git log 记录 patch

    如何打tag git tag a KPN FW v1 02 01 build01 m KPN FW v1 02 01 build01 git push origin tags git查看历史记录及修改内容 git whatchanged h
  • 《UNIX环境高级编程》学习笔记

    Unix环境高级编程 学习笔记 第一章 NUIX基础知识 1 5输入和输出 文件描述符通常是一个非负整数 用以标识一个特定进程正在访问的文件 运行一个新程序 所有shell会为其打开3个文件描述符 标准输入 输出 错误 不带缓冲的I O 标
  • HTML、CSS、JavaScript学习总结

    学习总结 HTML 网站开发的主要原则是 用标签元素HTML描述网页的内容结构 用CSS描述网页的排版布局 用JavaScript描述网页的事件处理 即鼠标或键盘在网页元素上的动作后的程序 HTML Hyper Text Mark up L
  • 爬取去哪儿酒店信息及评论

    爬取去哪儿酒店信息及评论 第一步 获取城市列表 import requests import json import codecs 去哪儿城市列表 url https touch qunar com h api hotel hotelcit
  • setPlainText

    QString toPlainText const void setPlainText const QString text setPlainText 顾名思义 是设置纯文本的 而setText 参数除了可以设置为纯文本之外 还可以设置为一

随机推荐

  • js随手笔记之一 存储之cookies

    概念 什么是cookie 全称 HTTP Cookie 最初是用于客户端存储回话信息的 cookie在性质上是绑定在特定的域名下 当设定一个cookie后再给创建它的域名发送请求时 都会包含这个cookie cookie的作用是什么 1 当
  • 数论整理之特殊数three:142857

    不重要的一篇文章 走马数 142857 1 142857 原数字 142857 2 285714 轮值 142857 3 428571 轮值 142857 4 571428 轮值 142857 5 714285 轮值 142857 6 85
  • vant中获取tab标签页的元素

    问题 vant框架中想要获取标签元素但又发现直接用 click和 change传id都无效 那应该怎么做呢 解决 在van tabs标签上顶一个点击事件 给van tab的name属性绑定一个唯一的值 然后将name作为参数传给该事件即可
  • 单例模式之懒汉式

    在上篇文章中 我们讲了单例模式中的饿汉式 今天接着来讲懒汉式 1 懒汉式单例模式的实现 public class LazySingleton private static LazySingleton instance null 让构造函数为
  • 前端八股文——javascript中Array⽅法总结

    Array方法 1 创建数组 1 1 Array from 1 2 Array of 方法 1 3 sort 排序函数原理 1 4 copyWithin 1 5 find 1 6 findIndex 2 对原数组有影响 2 1 push 2
  • Face++人工智能开放平台、百度AI、腾讯优图平台比较

    平台整体展示 百度AI平台展示了产品服务 解决方案 案例场景 资源中心 合作伙伴 AI加速器 资讯 社区板块 百度AI平台战略的两大核心是阿波罗Apollo平台和DuerOS对话式人工智能系统 阿波罗致力于汽车行业开发和自动驾驶领域的合作
  • Vue.js:Select--Option >下拉框绑定和取值

    遇到了这个解决了 所以记录一下 1 Vue js 2 https www iviewui com components select 完成vue js下拉框选择绑定与取值 实现效果图如下 template代码
  • Kafka 问答小结

    什么是消息中间件 消息中间件是基于队列与消息传递技术 在网络环境中为应用系统提供同步或异步 可靠消息传输的支撑性软件系统 消息中间件利用高效可靠的消息传递机制进行平台无关的数据交流 并基于数据通信来进行分布式系统的集成 通过提供消息传递和消
  • 数字化时代-21:入住CSDN 2个月进展报告

    摘要 入住CSDN2个月进展报告 积分 461 1311 等级 1级别 4 级 排名 20万 7万 访问量 8950 24739 2 每周文章变化 3 每周访问量变化 4 每周访问总重量变化 5 每周粉丝总计变化 6 总积分变化
  • 【MySQL】免安装版MySQL安装教程

    前言 近日 重新安装了一下本地的数据库 参考了很多博客才将MySQL给安装好 为了方便以后安装 便结合了网上博客的安装方法以及自己的一些经验写下这篇博客 也希望能给你们带来帮助 一 MySQL是什么 MySQL 是一个关系型数据库管理系统
  • docker配置seata分布式事务并注册至nacos

    Docker配置分布式事务Seata并注册到Nacos服务中心 Docker常用基础命令 docker ps 查询当前服务器的服务 docker images 查看服务下载的镜像 docker ps a 查看所有的服务 包含未开启的服务 d
  • 【Protobuf(四)】消息格式

    protobuf是一种平台语言无关的消息序列化协议 相比于传统的json xml 序列后的空间更小 但是无法自解释 需要结合额外的proto定义文件才能反序列化 当然这样也更安全 下面记录一下protobuf消息格式 protobuf消息序
  • 统计与分布之伯努利分布与二项分布

    目录 目录 前文列表 伯努利分布 二项分布 前文列表 计数原理 组合与排列 统计与分布之高斯分布 统计与分布之泊松分布 伯努利分布 伯努利分布 Bernoulli Distribution 是一种离散分布 又称为 0 1 分布 或 两点分布
  • 测试用例编写

    今天主要编写了办公模块下快速创建板块中的测试用例 快速创建提日志 多个功能点钟含有相同的功能 而且功能以模块的形式呈现 包含的功能较多 可以把该模块提取出来单独编写测试用例 这样就不用再每个功能点下重复编写 在快速创建日志中 日报 周报 月
  • The kdb Kernel Debugger

    The kdb Kernel Debugger Many readers may be wondering why the kernel does not have any more advanced debugging features
  • leetcode:62. 不同路径

    题目来源 leetcode 题目描述 题目解析 从暴力搜索到动态规划 暴力搜索 class Solution 机器人从 i j 走到 m n 一共有几种方法 int process int i int j int m int n if i
  • ASP + SQL Server聊天室设计实例

    ASP SQL Server聊天室设计实例 目 录 第一章 绪论 1 1 设计思想 1 2 开发工具和相关技术简介 第二章 聊天室总体分析和设计 2 1 聊天室的运行原理 2 2 聊天室的功能 2 3 聊天室的页面结构设计 2 4 聊天室的
  • hive之full outer join(全连接)使用方法

    目录 介绍 语法 例子 创建顾客表 customers 创建订单表 orders full outer join语句 left join union right join语句 介绍 full outer join结合了 LEFT JOIN
  • vue 指定元素滚动到页面可视区域

    使用场景 1 点击页面tab 或步骤条的某一步 使其对应元素滚动到页面可视区域 2 使遍历而来的list滚动到页面可视区域 实现 使用el scrollIntoView API实现 scrollIntoView 方法会滚动元素的父容器 使被
  • db2 replace函数的用法_高效的10个Pandas函数,你都用过吗?

    作者 Soner Y ld r m 来源 towardsdatascience 翻译 编辑 Python大数据分析 Pandas是python中最主要的数据分析库之一 它提供了非常多的函数 方法 可以高效地处理并分析数据 让pandas如此
Powered by Hwhale