来源:机器之心

编译:Jamin、杜伟、张倩

我们都知道,Numpy 是 Python 环境下的扩展程序库,支持大量的维度数组和矩阵运算;Pandas 也是 Python 环境下的数据操作和分析软件包,以及强大的数据分析库。二者在日常的数据分析中都发挥着重要作用,如果没有 Numpy 和 Pandas 的支持,数据分析将变得异常困难。但有时我们需要加快数据分析的速度,有什么办法可以帮助到我们吗?在本文中,数据和分析工程师 Kunal Dhariwal 为我们介绍了 12 种 Numpy 和 Pandas 函数,这些高效的函数会令数据分析更为容易、便捷。最后,读者也可以在 GitHub 项目中找到本文所用代码的 Jupyter Notebook。项目地址:https://github.com/kunaldhariwal/12-Amazing-Pandas-NumPy-FunctionsNumpy 的 6 种高效函数首先从 Numpy 开始。Numpy 是用于科学计算的 Python 语言扩展包,通常包含强大的 N 维数组对象、复杂函数、用于整合 C/C++和 Fortran 代码的工具以及有用的线性代数、傅里叶变换和随机数生成能力。除了上面这些明显的用途,Numpy 还可以用作通用数据的高效多维容器(container),定义任何数据类型。这使得 Numpy 能够实现自身与各种数据库的无缝、快速集成。接下来一一解析 6 种 Numpy 函数。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_valarray([1, 8, 2, 0], dtype=int64)np.sort(x[index_val])array([10, 12, 12, 16])

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

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

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

# Random integersarray = np.random.randint(20, size=12)arrayarray([ 0,  1,  8, 19, 16, 18, 10, 11,  2, 13, 14,  3])#  Divide by 2 and check if remainder is 1cond = np.mod(array, 2)==1condarray([False,  True, False,  True, False, False, False,  True, False, True, False,  True])# Use extract to get the valuesnp.extract(cond, array)array([ 1, 19, 11, 13,  3])# Apply condition on extract directlynp.extract(((array 3) | (array > 15)), array)array([ 0,  1, 19, 16, 18,  2])

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 positionnp.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 notnp.where(y>5, "Hit", "Miss")array(['Miss', 'Miss', 'Hit', 'Hit', 'Miss', 'Hit', 'Miss', 'Hit', 'Hit'],dtype=')

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 结构中。

Pandas 擅长处理的类型如下所示:

  • 容易处理浮点数据和非浮点数据中的 缺失数据(用 NaN 表示);

  • 大小可调整性: 可以从 DataFrame 或者更高维度的对象中插入或者是删除列;

  • 显式数据可自动对齐: 对象可以显式地对齐至一组标签内,或者用户可以简单地选择忽略标签,使 Series、 DataFrame 等自动对齐数据;

  • 灵活的分组功能,对数据集执行拆分-应用-合并等操作,对数据进行聚合和转换;

  • 简化将数据转换为 DataFrame 对象的过程,而这些数据基本是 Python 和 NumPy 数据结构中不规则、不同索引的数据;

  • 基于标签的智能切片、索引以及面向大型数据集的子设定;

  • 更加直观地合并以及连接数据集;

  • 更加灵活地重塑、转置(pivot)数据集;

  • 轴的分级标记 (可能包含多个标记);

  • 具有鲁棒性的 IO 工具,用于从平面文件 (CSV 和 delimited)、 Excel 文件、数据库中加在数据,以及从 HDF5 格式中保存 / 加载数据;

  • 时间序列的特定功能: 数据范围的生成以及频率转换、移动窗口统计、数据移动和滞后等。

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

import ioimport requests# I am using this online data set just to make things easier for you guysurl = "https://raw.github.com/vincentarelbundock/Rdatasets/master/csv/datasets/AirPassengers.csv"s = requests.get(url).content# read only first 10 rowsdf = pd.read_csv(io.StringIO(s.decode('utf-8')),nrows=10 , index_col=0)

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

# create a dataframedframe = 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 framechangefn = lambda x: '%.2f' % x# Make changes element-wisedframe['d'].map(changefn)

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

# max minus mix lambda fnfn = lambda x: x.max() - x.min()# Apply this on dframe that we've just created abovedframe.apply(fn)

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

# Using the dataframe we created for read_csvfilter1 = df["value"].isin([112]) filter2 = df["time"].isin([1949.000000])df [filter1 & filter2]

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

# creating sample series data = pd.Series(['India', 'Pakistan', 'China', 'Mongolia'])# Assigning issue that we facedata1= data# Change a valuedata1[0]='USA'# Also changes value in old dataframedata# 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)

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

# We'll use the same dataframe that we used for read_csvframex =  df.select_dtypes(include="float64")# Returns only time column

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

# Create a sample dataframeschool = 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 coursetable = 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- end -推荐阅读

【Python专栏】Python实现EXCEL的常规操作,一文涵盖10个方面(文末送书)

【用户分析】一文讲清楚业务分析的用户画像及其技术

【用户分析】TikTok抖音国际版用户留存背后的数据推演

【offer必备】拼多多2020数据分析笔试题

点赞、分享、在看,一键三连 ↓↓↓

dataframe转化为array_【Python专栏】12 种高效 Numpy 和 Pandas 函数为你加速分析相关推荐

  1. 加速数据分析,这12种高效Numpy和Pandas函数为你保驾护航

    我们都知道,Numpy 是 Python 环境下的扩展程序库,支持大量的维度数组和矩阵运算:Pandas 也是 Python 环境下的数据操作和分析软件包,以及强大的数据分析库.二者在日常的数据分析中 ...

  2. 让数据分析更便捷快速,了解这12种Numpy和Pandas函数

    选自TowardsDataScience 作者:Kunal Dhariwal 机器之心编译 我们都知道,Numpy 是 Python 环境下的扩展程序库,支持大量的维度数组和矩阵运算:Pandas 也 ...

  3. 《Python数据分析常用手册》NumPy和Pandas

    转自:https://blog.csdn.net/fu6543210/article/details/80508182 <Python数据分析常用手册>NumPy和Pandas 1.Num ...

  4. python如何从一个dataframe提取相应的行组成一个新的dataframe_从Excel到Python:最常用的36个Pandas函数!最完整的Pandas教程!...

    本文涉及pandas最常用的36个函数,通过这些函数介绍如何完成数据生成和导入.数据清洗.预处理,以及最常见的数据分类,数据筛选,分类汇总,透视等最常见的操作. 生成数据表 常见的生成数据表的方法有两 ...

  5. python getopt_python 5种 statsPython中的getopt函数使用详解

    函数原型: getopt.getopt(args, shortopts, longopts=[]) 参数解释: args:args为需要解析的参数列表.一般使用sys.argv[1:],这样可以过滤掉 ...

  6. soapui工具_Java 开发者不容错过的 12 种高效工具

    摘要:Java 程序员常常都会想办法如何更快地编写 Java 代码,让编程变得更加轻松.目前,市面上涌现出越来越多的高效编程工具.所以,以下总结了一系列工具列表,其中包含了大多数开发人员已经使用.正在 ...

  7. python 基础知识之(numpy、pandas、matplotlib、tensorflow)

    1.Numpy库: 参考网页 1.1创建Numpy变量 创建一个 ndarray 只需调用 NumPy 的 array 函数即可:numpy.array(object, dtype = None, c ...

  8. 从Excel到Python:最常用的36个Pandas函数

    本文为粉丝投稿的<从Excel到Python>读书笔记 本文涉及pandas最常用的36个函数,通过这些函数介绍如何完成数据生成和导入.数据清洗.预处理,以及最常见的数据分类,数据筛选,分 ...

  9. astype函数_从Excel到Python:最常用的36个Pandas函数!最完整的Pandas教程!

    本文涉及pandas最常用的36个函数,通过这些函数介绍如何完成数据生成和导入.数据清洗.预处理,以及最常见的数据分类,数据筛选,分类汇总,透视等最常见的操作. 生成数据表 常见的生成数据表的方法有两 ...

最新文章

  1. web中静态资源和动态资源的概念及区别
  2. 消息中间件系列(五):MQ消息队列的12点核心原理总结
  3. 不用正则表达式,用javascript从零写一个模板引擎(一)
  4. 云在天之南——我的七天七夜(率性苍山洱海)
  5. JS与Asp.Net的传值
  6. python一维数组聚类
  7. HTMl5 的新特性
  8. SpringBoot2 Spring Cloud consul 分布式配置中心使用教程
  9. SDRAM 控制器(七)——控制模块
  10. 联想服务器ThinkServer网卡驱动程序缺失的解决办法
  11. android 实现发送短信功能
  12. 高通平台msm8953 display子系统学习
  13. 【pys60笔记】中文
  14. GIF 字节格式介绍
  15. UNITY NGUI IPHONEX完美适配
  16. 2021年第四届“传智杯“大学B组
  17. [论文笔记]slope one predictors for online rating-based collaborative filtering
  18. SWAT—Samba WEB管理工具
  19. 【技术总结大全】【用来快速查询的文章】技术总结大全
  20. linux les命令,Linux用户和组命令

热门文章

  1. java四神兽_SpringCloud五大神兽之Eureka
  2. c语言float m1 m2什么意思,m1和m2的区别,一文带你秒懂这两者的关联
  3. java rx.observable_Rxjava2 Observable的条件操作符详解及实例
  4. java rmi漏洞工具_学生会私房菜【20200924】Weblogic WLS核心组件反序列化命令执行突破(CVE20182628)漏洞复现...
  5. split 将字符串分割成字符串数组
  6. 原生类型的autoboxing和auto-unboxing
  7. intellij idea中解决java.lang.VerifyError: Expecting a stackmap frame at branch target的方法
  8. LintCode 387: Smallest Difference
  9. 设计模式学习(三)——装饰器模式
  10. HttpClient使用之下载远程服务器中的文件(注意目录遍历漏洞)