?12个很棒的Pandas和NumPy函数,让分析事半功倍
全文共5431字 , 预计学习时长16分钟
?

文章图片
大家都知道Pandas和NumPy函数很棒 , 它们在日常分析中起着重要的作用 。 没有这两个函数 , 人们将在这个庞大的数据分析和科学世界中迷失方向 。
今天 , 小芯将分享12个很棒的Pandas和NumPy函数 , 这些函数将会让生活更便捷 , 让分析事半功倍 。
在本文结尾 , 读者可以找到文中提到的代码的JupyterNotebook 。
从NumPy开始:NumPy是使用Python进行科学计算的基本软件包 。 它包含以下内容:
·强大的N维数组对象
·复杂的(广播broadcasting)功能
·集成C/C++和Fortran代码工具
【?12个很棒的Pandas和NumPy函数,让分析事半功倍】·有用的线性代数 , 傅立叶变换和随机数功能
除明显的科学用途外 , NumPy是高效的通用数据多维容器 , 可以定义任意数据类型 。 这使NumPy能够无缝且高速地与各种数据库进行集成 。
1.allclose()
Allclose()用于匹配两个数组并且以布尔值形式输出 。 如果两个数组的项在公差范围内不相等 , 则返回False 。 这是检查两个数组是否相似的好方法 , 因为这一点实际很难手动实现 。
array1=np.array([0.12,0.17,0.24,0.29])array2=np.array([0.13,0.19,0.26,0.31])#withatoleranceof0.1,itshouldreturnFalse:np.allclose(array1,array2,0.1)False#withatoleranceof0.2,itshouldreturnTrue:np.allclose(array1,array2,0.2)True
2.argpartition()

文章图片
来源:Pexels
NumPy的这个函数非常优秀 , 可以找到N最大值索引 。 输出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])
3.clip()
Clip()用于将值保留在间隔的数组中 。 有时 , 需要将值保持在上限和下限之间 。 因此 , 可以使用NumPy的clip()函数 。 给定一个间隔 , 该间隔以外的值都将被裁剪到间隔边缘 。
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()函数用于根据特定条件从数组中提取特定元素 。 有了该函数 , 还可以使用and和or等的语句 。
#Randomintegersarray=np.random.randint(20,size=12)arrayarray([0,1,8,19,16,18,10,11,2,13,14,3])#Divideby2andcheckifremainderis1cond=np.mod(array,2)==1condarray([False,True,False,True,False,False,False,True,False,True,False,True])#Useextracttogetthevaluesnp.extract(cond,array)array([1,19,11,13,3])#Applyconditiononextractdirectlynp.extract(((array<>15)),array)array([0,1,19,16,18,2])
5.percentile()
Percentile()用于计算沿指定轴的数组元素的第n个百分位数 。
a=np.array([1,5,6,8,1,7,3,6,9])print("50thPercentileofa,axis=0:",np.percentile(a,50,axis=0))50thPercentileofa,axis=0:6.0b=np.array([[10,7,4],[3,2,1]])print("30thPercentileofb,axis=0:",np.percentile(b,30,axis=0))30thPercentileofb,axis=0:[5.13.51.9]
6.where()

文章图片
来源:Pexels
Where()用于从满足特定条件的数组中返回元素 。 它返回在特定条件下值的索引位置 。 这差不多类似于在SQL中使用的where语句 。 请看以下示例中的演示 。
y=np.array([1,5,6,8,1,7,3,6,9])#Whereyisgreaterthan5,returnsindexpositionnp.where(y>5)array([2,3,5,7,8],dtype=int64),)#Firstwillreplacethevaluesthatmatchthecondition,#secondwillreplacethevaluesthatdoesnotnp.where(y>5,"Hit","Miss")array(["Miss","Miss","Hit","Hit","Miss","Hit","Miss","Hit","Hit"],dtype="
接着来讲一讲神奇的Pandas函数 。
PandasPandas是一个Python软件包 , 提供快速、灵活和富有表现力的数据结构 , 旨在使处理结构化(表格 , 多维 , 潜在异构)的数据和时间序列数据既简单又直观 。
Pandas非常适合许多不同类型的数据:
·具有异构类型列的表格数据 , 例如在SQL表或Excel电子表格中
·有序和无序(不一定是固定频率)的时间序列数据 。
·具有行和列标签的任意矩阵数据(同类型或异类)
·观察/统计数据集的任何其他形式 。 实际上 , 数据根本不需要标记 , 即可放入Pandas数据结构 。
以下是Pandas的优势:
·轻松处理浮点数据和非浮点数据中的缺失数据(表示为NaN)
·大小可变性:可以从DataFrame和更高维的对象中插入和删除列
·自动和显式的数据对齐:在计算中 , 可以将对象显式对齐到一组标签 , 或者用户可以直接忽略标签 , 并让Series , DataFrame等自动对齐数据
·强大灵活的分组功能 , 可对数据集执行拆分-应用-合并操作 , 以汇总和转换数据
·轻松将其他Python和NumPy数据结构中的不规则的、索引不同的数据转换为DataFrame对象
·大数据集的智能标签的切片 , 高级索引和子集化
·直观的合并和联接数据集
·数据集的灵活重塑和旋
·坐标轴的分层标签(每个刻度可能有多个标签)
·强大的IO工具 , 用于从平面文件(CSV和定界文件)、Excel文件 , 数据库加载数据 , 以及以超高速HDF5格式保存/加载数据
·特定于时间序列的功能:日期范围生成和频率转换、移动窗口统计、日期移位和滞后 。
1.apply()
Apply()函数允许用户传递函数并将其应用于Pandas序列中每个单一值 。
#maxminusmixlambdafnfn=lambdax:x.max()-x.min()#Applythisondframethatwe"vejustcreatedabovedframe.apply(fn)
2.copy()
Copy()函数用于创建Pandas对象的副本 。 将数据帧分配给另一个数据帧时 , 在另一个数据帧中进行更改 , 其值也会进行同步更改 。 为了避免出现上述问题 , 可以使用copy()函数 。
#creatingsampleseriesdata=https://pcff.toutiao.jxnews.com.cn/p/20200403/pd.Series(["India","Pakistan","China","Mongolia"])#Assigningissuethatwefacedata1=data#Changeavaluedata1[0]="USA"#Alsochangesvalueinolddataframedata#Topreventthat,weuse#creatingcopyofseriesnew=data.copy()#assigningnewvaluesnew[1]="Changedvalue"#printingdataprint(new)print(data)
3.read_csv(nrows=n)

文章图片
来源:Pexels
读者可能已经知道了read-csv函数的重要性 。 但即使不必要 , 大多数人仍会错误地读取整个.csv文件 。 假设未知10GB的.csv文件中的列和数据 , 在这种情况下读取整个.csv文件并非明智的决定 , 因为这会浪费内存和时间 。 可以仅从.csv中导入几行 , 然后根据需要继续操作 。
importioimportrequests#Iamusingthisonlinedatasetjusttomakethingseasierforyouguysurl="https://raw.github.com/vincentarelbundock/Rdatasets/master/csv/datasets/AirPassengers.csv"s=requests.get(url).content#readonlyfirst10rowsdf=pd.read_csv(io.StringIO(s.decode("utf-8")),nrows=10,index_col=0)
4.map()
map()函数用于根据输入对应关系映射Series的值 。 用于将序列(Series)中的每个值替换为另一个值 , 该值可以从函数、字典或序列(Series)中得出 。
#createadataframedframe=pd.DataFrame(np.random.randn(4,3),columns=list("bde"),index=["India","USA","China","Russia"])#computeaformattedstringfromeachfloatingpointvalueinframechangefn=lambdax:"%.2f"%x#Makechangeselement-wisedframe["d"].map(changefn)
5.isin()
Isin()函数用于过滤数据帧 。 Isin()有助于选择在特定列中具有特定(或多个)值的行 。 这是笔者见过的最有用的功能 。
#Usingthedataframewecreatedforread_csvfilter1=df["value"].isin([112])filter2=df["time"].isin([1949.000000])df[filter1&filter2]
6.select_dtypes()
select_dtypes()函数基于dtypes列返回数据框的列的子集 。 设置此函数的参数 , 以包括具有某些特定数据类型的所有列;也可对其进行设置 , 以排除具有某些特定数据类型的所有列 。
#We"llusethesamedataframethatweusedforread_csvframex=df.select_dtypes(include="float64")#Returnsonlytimecolumn
推荐阅读
- 情商高、会说话,相处起来很舒服的星座,走到哪里都受欢迎
- 西塞回忆在利物浦时的重伤:骨头断了很多根,差点被截肢
- 裴秀智无ps照很真实,穿纱裙上《Vogue》,反而更美好
- 余生不长,和谁在一起,真的很重要
- 市场内幕消息指称日产400Z将比丰田GR Supra便宜很多
- 天气炎热,汽车空调这些点很多人都不知道~
- 东北70-80年代流行的老菜,现在都慢慢消失了,很多年轻人没吃过
- 炖羊肉汤,这4种料缺一不可!很多人不清楚,所以肉不香膻味重
- 梦幻西游:单凭攻击问鼎神威顶级宠,12个技能,属性真是太炸了!
- 库克真香警告!小刘海和5纳米芯片很香,果粉:但这价格最为感人
