0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

解读12 种 Numpy 和 Pandas 高效函数技巧

马哥Linux运维 来源:机器之心编译 作者:Kunal Dhariwal 2021-06-29 17:05 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

本文分享给大家 12 种 Numpy 和 Pandas 函数,这些高效的函数会令数据分析更为容易、便捷。最后,读者也可以在 GitHub 项目中找到本文所用代码的 Jupyter Notebook。

项目地址:https://github.com/kunaldhariwal/12-Amazing-Pandas-NumPy-Functions

Numpy 的 6 种高效函数

首先从 Numpy 开始。Numpy 是用于科学计算的 Python 语言扩展包,通常包含强大的 N 维数组对象、复杂函数、用于整合 C/C++和 Fortran 代码的工具以及有用的线性代数、傅里叶变换和随机数生成能力。

除了上面这些明显的用途,Numpy 还可以用作通用数据的高效多维容器(container),定义任何数据类型。这使得 Numpy 能够实现自身与各种数据库的无缝、快速集成。

接下来一一解析 6 种 Numpy 函数。

1、argpartition()

借助于 argpartition(),Numpy 可以找出 N 个最大数值的索引,也会将找到的这些索引输出。然后我们根据需要对数值进行排序。

x = np.array([12, 10, 12, 0, 6, 8, 9, 1, 16, 4, 6, 0])index_val = np.argpartition(x, -4)[-4:]

index_val

array([1, 8, 2, 0], dtype=int64)np.sort(x[index_val])

array([10, 12, 12, 16])

2、allclose()

allclose() 用于匹配两个数组,并得到布尔值表示的输出。如果在一个公差范围内(within a tolerance)两个数组不等同,则 allclose() 返回 False。该函数对于检查两个数组是否相似非常有用。

array1 = np.array([0.12,0.17,0.24,0.29])

array2 = np.array([0.13,0.19,0.26,0.31])# with a tolerance of 0.1, it should return False:

np.allclose(array1,array2,0.1)

False# with a tolerance of 0.2, it should return True:

np.allclose(array1,array2,0.2)

True

3、clip()

Clip() 使得一个数组中的数值保持在一个区间内。有时,我们需要保证数值在上下限范围内。为此,我们可以借助 Numpy 的 clip() 函数实现该目的。给定一个区间,则区间外的数值被剪切至区间上下限(interval edge)。

x = np.array([3, 17, 14, 23, 2, 2, 6, 8, 1, 2, 16, 0])np.clip(x,2,5)

array([3, 5, 5, 5, 2, 2, 5, 5, 2, 2, 5, 2])

4、extract()

顾名思义,extract() 是在特定条件下从一个数组中提取特定元素。借助于 extract(),我们还可以使用 and 和 or 等条件。

# Random integers

array = np.random.randint(20, size=12)

array

array([ 0, 1, 8, 19, 16, 18, 10, 11, 2, 13, 14, 3])# Divide by 2 and check if remainder is 1

cond = np.mod(array, 2)==1

cond

array([False, True, False, True, False, False, False, True, False, True, False, True])# Use extract to get the values

np.extract(cond, array)

array([ 1, 19, 11, 13, 3])# Apply condition on extract directly

np.extract(((array 《 3) | (array 》 15)), array)

array([ 0, 1, 19, 16, 18, 2])

5、where()

Where() 用于从一个数组中返回满足特定条件的元素。比如,它会返回满足特定条件的数值的索引位置。Where() 与 SQL 中使用的 where condition 类似,如以下示例所示:

y = np.array([1,5,6,8,1,7,3,6,9])# Where y is greater than 5, returns index position

np.where(y》5)

array([2, 3, 5, 7, 8], dtype=int64),)# First will replace the values that match the condition, # second will replace the values that does not

np.where(y》5, “Hit”, “Miss”)

array([ Miss , Miss , Hit , Hit , Miss , Hit , Miss , Hit , Hit ],dtype= 《U4 )

6、percentile()

Percentile() 用于计算特定轴方向上数组元素的第 n 个百分位数。

a = np.array([1,5,6,8,1,7,3,6,9])print(“50th Percentile of a, axis = 0 : ”,

np.percentile(a, 50, axis =0))

50th Percentile of a, axis = 0 : 6.0b = np.array([[10, 7, 4], [3, 2, 1]])print(“30th Percentile of b, axis = 0 : ”,

np.percentile(b, 30, axis =0))

30th Percentile of b, axis = 0 : [5.1 3.5 1.9]

这就是 Numpy 扩展包的 6 种高效函数,相信会为你带来帮助。接下来看一看 Pandas 数据分析库的 6 种函数。

Pandas的 6 种高效函数

Pandas 也是一个 Python 包,它提供了快速、灵活以及具有显著表达能力的数据结构,旨在使处理结构化 (表格化、多维、异构) 和时间序列数据变得既简单又直观。

Pandas 适用于以下各类数据:

具有异构类型列的表格数据,如 SQL 表或 Excel 表;

有序和无序 (不一定是固定频率) 的时间序列数据;

带有行/列标签的任意矩阵数据(同构类型或者是异构类型);

其他任意形式的统计数据集。事实上,数据根本不需要标记就可以放入 Pandas 结构中。

1、read_csv(nrows=n)

大多数人都会犯的一个错误是,在不需要.csv 文件的情况下仍会完整地读取它。如果一个未知的.csv 文件有 10GB,那么读取整个.csv 文件将会非常不明智,不仅要占用大量内存,还会花很多时间。我们需要做的只是从.csv 文件中导入几行,之后根据需要继续导入。

import io

import requests# I am using this online data set just to make things easier for you guys

url = “https://raw.github.com/vincentarelbundock/Rdatasets/master/csv/datasets/AirPassengers.csv”

s = requests.get(url).content# read only first 10 rows

df = pd.read_csv(io.StringIO(s.decode( utf-8 )),nrows=10 , index_col=0)

2、map()

map( ) 函数根据相应的输入来映射 Series 的值。用于将一个 Series 中的每个值替换为另一个值,该值可能来自一个函数、也可能来自于一个 dict 或 Series。

# create a dataframe

dframe = pd.DataFrame(np.random.randn(4, 3), columns=list( bde ), index=[ India , USA , China , Russia ])#compute a formatted string from each floating point value in frame

changefn = lambda x: %.2f % x# Make changes element-wise

dframe[ d ].map(changefn)

3、apply()

apply() 允许用户传递函数,并将其应用于 Pandas 序列中的每个值。

# max minus mix lambda fn

fn = lambda x: x.max() - x.min()# Apply this on dframe that we ve just created above

dframe.apply(fn)

4、isin()

lsin () 用于过滤数据帧。Isin () 有助于选择特定列中具有特定(或多个)值的行。

# Using the dataframe we created for read_csv

filter1 = df[“value”].isin([112])

filter2 = df[“time”].isin([1949.000000])df [filter1 & filter2]

5、copy()

Copy () 函数用于复制 Pandas 对象。当一个数据帧分配给另一个数据帧时,如果对其中一个数据帧进行更改,另一个数据帧的值也将发生更改。为了防止这类问题,可以使用 copy () 函数。

# creating sample series

data = pd.Series([ India , Pakistan , China , Mongolia ])# Assigning issue that we face

data1= data

# Change a value

data1[0]= USA

# Also changes value in old dataframe

data# To prevent that, we use# creating copy of series

new = data.copy()# assigning new values

new[1]= Changed value # printing data print(new)

print(data)

6、select_dtypes()

select_dtypes() 的作用是,基于 dtypes 的列返回数据帧列的一个子集。这个函数的参数可设置为包含所有拥有特定数据类型的列,亦或者设置为排除具有特定数据类型的列。

# We ll use the same dataframe that we used for read_csv

framex = df.select_dtypes(include=“float64”)# Returns only time column

最后,pivot_table( ) 也是 Pandas 中一个非常有用的函数。如果对 pivot_table( ) 在 excel 中的使用有所了解,那么就非常容易上手了。

# Create a sample dataframe

school = pd.DataFrame({ A : [ Jay , Usher , Nicky , Romero , Will ],

B : [ Masters , Graduate , Graduate , Masters , Graduate ],

C : [26, 22, 20, 23, 24]})# Lets create a pivot table to segregate students based on age and course

table = pd.pivot_table(school, values = A , index =[ B , C ],

columns =[ B ], aggfunc = np.sum, fill_value=“Not Available”)

table

原文链接:https://towardsdatascience.com/12-amazing-pandas-numpy-functions-22e5671a45b8

编辑:jq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • SQL
    SQL
    +关注

    关注

    1

    文章

    807

    浏览量

    46939
  • 函数
    +关注

    关注

    3

    文章

    4422

    浏览量

    67847
  • 代码
    +关注

    关注

    30

    文章

    4976

    浏览量

    74380

原文标题:12种Numpy&Pandas高效技巧

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    深入剖析AD5415:一款高性能双路12位DAC的全方位解读

    深入剖析AD5415:一款高性能双路12位DAC的全方位解读 在电子设计领域,数模转换器(DAC)是连接数字世界与模拟世界的关键桥梁。今天,我们将深入探讨Analog Devices公司
    的头像 发表于 04-13 17:35 363次阅读

    IDT产品停产通知解读:对电子工程师的影响与应对

    一份产品停产通知(PDN),编号为V - 12 - 03R2,这对相关的设计工作可能会产生重要影响。下面我们就来详细解读这份通知。 文件下载: IDTVPP1101EVG.pdf 一、通知关键时间节点
    的头像 发表于 04-12 13:15 407次阅读

    安森美半导体产品/工艺变更通知解读

    安森美半导体产品/工艺变更通知解读 作为电子工程师,我们时刻关注着半导体产品的动态,尤其是产品和工艺的变更,因为这可能会对我们的设计产生重大影响。今天,我们来解读安森美半导体
    的头像 发表于 04-11 12:05 285次阅读

    NXP Freescale S12 MagniV S12ZVC:高效集成的CAN MCU解决方案

    NXP Freescale S12 MagniV S12ZVC:高效集成的CAN MCU解决方案 作为一名电子工程师,在硬件设计开发中,选择一款合适的微控制器(MCU)至关重要。今天,我要给大家介绍
    的头像 发表于 04-10 13:15 135次阅读

    探索MAX15462C 12V评估套件:高效电源转换解决方案

    探索MAX15462C 12V评估套件:高效电源转换解决方案 在电子设计领域,电源管理模块的性能和稳定性至关重要。今天,我们来深入了解一下MAX15462C 12V评估套件,它为工程师们提供了一个
    的头像 发表于 04-02 14:45 168次阅读

    解读MAX20499:汽车级单路8A/12A降压转换器家族的卓越之选

    解读MAX20499:汽车级单路8A/12A降压转换器家族的卓越之选 在汽车电子领域,电源管理芯片的性能直接影响着整个系统的稳定性和可靠性。今天,我们来深入剖析一款在该领域表现出色的产品
    的头像 发表于 03-05 14:20 310次阅读

    解读LM3532:一款高效的白光LED驱动芯片

    解读LM3532:一款高效的白光LED驱动芯片 在当今的电子设备设计中,LED照明的应用越来越广泛,这就要求LED驱动芯片具备高效、灵活、可靠等特性。LM3532作为德州仪器(TI)推出的一款高性能
    的头像 发表于 02-27 11:10 253次阅读

    函数指针与回调函数解读

    函数指针是指向函数的指针变量。通过函数指针C语言可以实现各种强大的功能与设计方法。而回调函数函数指针最常见的用途,是C语言的重中之重,也是
    发表于 01-19 07:34

    C语言中实现函数宏的三方式

    在宏的第一个分号后便结束。即 a = b 和 b = tmp 均不受控制语句所作用。 因此,在工程中,一般使用三方式来对函数宏进行封装,分别为 {}、do{...}while(0
    发表于 12-29 07:34

    HarmonyOSAI编程智能代码解读

    CodeGenie > Explain Code,开始解读当前代码内容。 说明 最多支持解读20000字符以内的代码片段。 使用该功能需先完成CodeGenie登录授权。 本文主要从参考引用自HarmonyOS官方文档
    发表于 09-02 16:29

    yolov11转kmodel,numpy是要降级为1.x吗?

    python3.9,yolo是最新的稳定版,和yolo捆绑pip安装的numpy是2.0.1 错误日志
    发表于 08-11 08:16

    详解hal_entry入口函数

    当使用RTOS时,程序从main函数开始进行线程调度;当没有使用RTOS时,C语言程序的入口函数main函数调用了hal_entry函数。由于我们新建的工程是没有选用RTOS的,因此,
    的头像 发表于 07-25 15:34 2228次阅读

    HarmonyOS AI辅助编程工具(CodeGenie)代码智能解读

    。 选中.ets文件或者.cpp文件中需要被解释的代码行或代码片段,右键选择CodeGenie > Explain Code,开始解读当前代码内容。 说明 最多支持解读20000字符以内
    发表于 07-17 17:02

    SPI协议,寄存器解读

    最近在学习SPI协议,对寄存器操作不是特别熟练。发帖希望有大佬能从寄存器角度提供帮助,帮忙指导根据手册去解读协议。有偿。
    发表于 05-22 20:08

    解读 M12 航空插座型号:从数据传输速率匹配到工业需求

    德索精密工业旗下M12航空插座丰富多样的型号,在数据传输速率匹配和满足工业需求方面展现出强大的适应性,已成为推动工业现代化进程中不可或缺的重要组件,为工业设备的稳定运行和高效数据交互提供了坚实保障。
    的头像 发表于 05-08 08:57 599次阅读
    <b class='flag-5'>解读</b> M<b class='flag-5'>12</b> 航空插座型号:从数据传输速率匹配到工业需求