大数据技术技能分析大赛——第四章 数据的选择和运算

第四章 数据的选择和运算

学习目标:

掌握python的数据选择提取与切片方法

了解python的数据拼接与合并

掌握python的数据算数运算与比较运算

掌握python的数据统计分析运算

掌握python的数据排序与排名方法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yfvIKMb7-1668690599178)(C:\Users\kzk\AppData\Roaming\Typora\typora-user-images\image-20221116155945919.png)]

一、数据选择

1、NumPy数据选择

NumPy数组索引所包含的内容非常丰富,有很多种方式选中数据的子集或者某个元素。主要有一下四种方式:

基础索引 获取单个元素
切片    获取子数组
布尔索引 根据比较操作,获取数组元素
数组索引  传递索引数组,更加快速、灵活的获取子数据集

数组的索引主要是用来获得数组中的数据,在NumPy中数组的索引可以分为两大类:一类是一维数组的索引,二是二维数组的索引。一维数组的索引和列表的索引几乎是相同的,二维数组的索引则有很大不同

(1)一维数组元素提取

沿着单个轴,整数做下标用于选择单个元素,切片做下标用于选择元素的范围和序列,正整数用于从数组的开头开始索引元素(索引从0开始),而负整数用于从数组的结尾开始索引元素,其中最后一个元素的索引是-,第二个到最后一个元素的索引是-2,以此类推

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-s4Vti5Ai-1668690599180)(C:\Users\kzk\AppData\Roaming\Typora\typora-user-images\image-20221116200143595.png)]

(2)多维数组行列选择、区域选择

二维数组的索引格式是[a:b,m:n],逗号前选择行,逗号后选择列。而在选择行和列的时候可以传入列表,或者使用冒号来进行切片索引

关键技术:

语法总结如下:[对行进行切片,对列的切片]

行:可以有start:stop:step

列:可以有start:stop:step

【例】对二维数组进行提取,选择第一行第二列的数据元素并输出

import numpy as np
arr=np.array([1,2,3],[4,5,6])
print(arr[0,1])

2

【例】对二维数组进行提取选择第一行的进行输出

关键技术:多维数组中对行的选择,使用[]运算符只对行号选择即可

import numpy as np
arr=np.array([1,2,3],[4,5,6])
print(arr[0])

【例】对二维数组第一列的数据元素输出

关键技术:多维数组中对列的选择,可以使用[]运算符

、冒号运算符和逗号运算符,冒号对行号进行选择,间隔逗号对列号进行选择

import numpy as np
arr=np.array([1,2,3],[4,5,6])
print(arr[:,0])

[1 4]

(3)花式索引与布尔索引

布尔索引

我们可以通过一个布尔数组来索引目标数组,以此找出与布尔数组中值为True的对应的目标数组中的数据,布尔数组的长度必须与目标数组对应的轴长度一致

【例】一维数组的布尔索引

关键技术:假设我们有一个长度为7的字符串数组,然后对这个字符串数组进行逻辑运算,进而把元素的结果(布尔数组)作为索引的条件传递给目标数组:

arr=np.arange(7)
booling1=np.array([True,False,False,True,True,False,False])
arr[booling1]

【例】二维数组的布尔索引

关键技术:布尔数组中下标为0,3,4的位置是True,因此将会取出目标数组中的第0,3,4行,

arr=np.arrange(28).reshape((7,4))
arr

booling1=np.array([True,False,False,True,True,False,False])
arr[booling1]

花式索引

【例】找出数组arr中大于15的元素

关键技术:返回结果是一个一维数组

arr[arr>15]

【例】小于或等于15的数归零

arr[arr<=15]=0

2、pandas数据选择

(1)Serise数据获取

变量名[index]:idnex对应的值

变量名[[index1,index2,index3,·····]]:依次提取对应行的值

变量名[下限index1:上限index2:步长]:在下限的基础上,取出步长的行,并遇到上限就截止

(2)DataFrame数据获取
1、列索引取值

使用单个值或序列,可以从DataFrame中索引出一个或多个列

df.列名 :取出单列,输出格式为Series

df[列名]:取出单列,输出格式为Series

df[[列名]]:取出单列,格式为DataFrame

df[[列名1,列名2,列名3,······]]:取出各个列对应的元素,输出格式为DataFrame

2、取行方式

【例】通过切片方式选取多行

关键技术:这里使用的是一个中括号,这里的2代表步长:[“张某”:“段某”:2]=[下界:上界:步长]

print(df["张某":"段某":2])

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XsgVNqzb-1668690599180)(C:\Users\kzk\AppData\Roaming\Typora\typora-user-images\image-20221117164026014.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mr7GFqc8-1668690599181)(C:\Users\kzk\AppData\Roaming\Typora\typora-user-images\image-20221117164153641.png)]

二、多表合并

有时候,我们需要将一些数据片段进行组合拼接,形成更加丰富的数据集。pandas库提供了多种合并方法:mesge()/join()/concat()等

1、使用merge()方法合并数据集

语法:

pd.merge(left,right,how='inner',on=None,left_on=None,right_on=None,left_index=False,right_index=False,sort=True)

参数解释:

left:数据帧对象(左侧的数据对象)

right:另一个数据帧对象

on:要连接的列(名称)。必须在左侧和右侧数据框对象中找到

left_on:左数据框中用作键的列,可以是列名,也可以是长度等于数据帧长度的数组

right_on:右数据框中用作键的列,可以是列名,也可以是长度等于数据帧长度的数组

left_index:如果为True,则使用左侧数据框中的索引(行标签)作为其连接键。对于具有多索引(分层)的数据帧,级别数必须与右数据帧的连接键数匹配

right_index:与右数据帧的左索引用法相同

how:“left”,“right”,“outer”,“inner"的一个,默认为"inner”

sort:按连接键数按字典顺序对结果数据帧进行排序,默认为True。设置为False在许多情况下显著提高性能

【例】使用Left Join左连接方式合并数据帧

关键技术:请注意on=‘subject id’,how=‘left’

print (pd.merge(left,right,on='subject_id',how='left'))

【例】使用Right Join右连接的方式合并数据帧

关键技术:请注意on=‘subject_id’,how=‘right’

print(pd.merge(left,right,on='subject_id',how='right'))

【例】创建两个不同的数据帧,并使用merge()对其执行合并操作

import pandas as pd
left=pd.DataFrame({})
right=pd.DataFrame({})
print(left)
print()
print(right)
(1)使用一个键合并两个数据帧

关键技术:使用’id’键合并两个数据帧,并使用merge()对其执行合并操作,

print(pd.merge(left,right,on='id'))
(2)使用多个键合并两个数据帧

关键技术:使用’id’键及’subject_id’键合并两个数据帧,并使用merge()对其执行合并操作

print(pd.merge(left,right,on=['id',subject_id]))
(3)使用how参数合并

【例】使用Left Join左连接方式合并数据帧

关键技术:请注意on=‘subject id’,how=‘left’

print(pd.merge(left,right,on='subject_id',how='left'))

【例】右连接

print(pd.merge(left,right,on='subject_id',how='right'))

【例】使用outer Join 外连接方式合并数据帧

print(pd.merge(left,right,on='subject_id',how='outer'))

【例】使用inner Join合并数据帧

print(pd.merge(left,right,on='subject_id',how='inner'))

2、使用join()方法合并数据集

用于将序列中的元素以指定的字符连接生成一个新的字符串,join()数据帧的语法参数如下

DataFrame.join(other,on=None,how=‘left’,Isuffix=‘’,rsuffix=‘’,sort=False)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1Lzn1i5g-1668690599182)(C:\Users\kzk\AppData\Roaming\Typora\typora-user-images\image-20221117183700713.png)]

将两个数据表切片数据进行合并

df1=df[3:9][['序号','销量']]
df2=df[3:9][['天气','是否周末']]
print(df1.join(df2))

3、使用concat()方法合并数据集

可用于横向和纵向合并数据。

pd.concat(objs,axis=0,join='outer',join_axes=None,ignore_index=False)

objs-这是序列、数据帧或面板对象的序列或映射

axis-{0,1···},默认值是0,这是要连接的轴

join-{‘inner’,‘outer’},默认值是outer,如何处理其他轴上的索引,外部表示联合,内部表示交叉

ignore_index-布尔值,默认为False。如果为True,则不要使用连接轴上的索引值,生成的轴将标记为0···n-1

join_axes-这是索引对象的列表,用于气压(n-1)轴的特定索引,而不是执行内部、外部设置逻辑

【例】连接对象

import pandas as pd
one =pd.DataFrame({})
two=pd.DataFrame({})
print(pd.concat([one,two])

【例】实现将特定的键与被切碎的数据帧的每一部分相关联

keys参数

print(pd.concat([one,two],keys=['x','y']))

【例】按列合并对象

关键技术:如果沿axis=1合并对象,则会追加新列到原对象右侧

print(pd.concat([one,two],axis=1))

【例】对于存储在本地的数据集"sales.csv",使用Python将两个数据表切片数据进行合并

print(pd.concat([df1,df2]))

三、算数运算和比较运算

【例】对给定数组元素进行求和运算

关键技术:sum函数

import numpy as np
arr=np.array([1,2,3,4,5,6])
result=np.sum(arr)
print(result)

21

【例】对给定的数组元素的求乘积运算

关键技术:可以使用prod()函数

import numpy as np
arr=np.array([1,2,3,4,5,6])
result=np.prod(arr)
print(result)

720

【例】多个数组进行求和运算操作

要求每个数组的维度相同

import numpy as np
arr1=np.array([1,2,3,4,5,6])
arr2=np.arange(0,12,2)
print(arr1,'+',arr2,'=',arr1+arr2)
[1 2 3 4 5 6] + [ 0  2  4  6  8 10] = [ 1  4  7 10 13 16]

【例】对数值和数组进行求积运算操作

关键技术:使用乘法运算符*

import numpy as np
arr2=np.arrange(0,12,2)
print(1.5,'*',arr2,'=',1.5*arr2)

【例】对多个数组间进行求积运算操作

import numpy as np
arr1=np.array([1,2,3,4,5,6])
arr2=np.arange(0,12,2)
print(arr1,'*',arr2'=',arr1*arr2)

【例】对给定数组的元素进行以e为底的对数函数(log)的操作

import numpy as np
a=np.array([1,np.e,np.e**2])
result=p.log(a)
print(result)

【例】比较运算符判断

print("98是否大于100:",98>100)
>=
==
<=
得到布尔值

四、数据运算

1、非空值计数

【例】计算数据集每列非空值个数情况

count()方法

import pandas as pd
df=pd.read_csv('地址',encoding='gbk')
print(df.count())

【例】计算数据集每行非空值个数情况

import pandas as pd
df=pd.read_csv('地址',encoding='gbk')
print(df.count(axis=1))

【例】特定列进行非空值计数

import pandas as pd
df=pd.read_csv('地址',encoding='gbk')
print(df['线上销售量'].count())

【例】特定行进行非空值计数

import pandas as pd
df=pd.read_csv('地址',encoding='gbk')
print(df.iloc[0].count())

2、求和运算

sum()函数能够返回DataFrame数据的求和值,其中分轴参数axis的定义是axis:{index(0),columns(1)},即axis=0表示按索引值求和 axis=1表示按列求和

不特殊指定时,axis默认为0。

语法:

DataFrame.sum(axis=None,skipna=None,level=None,numeric_only=None,min_count=0,**kwargs)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZZWQy0pB-1668690599182)(C:\Users\kzk\AppData\Roaming\Typora\typora-user-images\image-20221117203250047.png)]

【例】按索引值求和

print(df.sum(axis=0))

print(df.sum(axis=1))

3、均值计算

mean()函数实现行/列数据均值计算

mean(axis=None,skipna=Nona,level=None,numeric_only=None,**kwargs)

参数定义与sum相同

【例】统计数据的算数平均值并输出结果

print(df.mean(axis=1))

4、最大值运算

max(axis=None,skipna=None,level=None,numeric_only=None,**kwargs)

【例】统计数据的最大值并输出结果

print(df.max(axis=1))

5、最小值运算

min······

print(df.min(axis=1))

6、中位数运算

median······

如果是偶数个,则中位数为中间两个数的均值

import numpy as np
a=np.arry([10,7,4],[3,2,1])
print(a)
np.median(a)

7、众数运算

mode(axis=0,numeric_only=Fales,dropna=True)

【例】计算学生各科成绩的众数

import pandas as pd
data=[]
columns=[]
df=pd.DataFrame(data=data,columns=columns)
print(df.mode())#三科的众数
print(df.mode(axis=1)#每一行的众数
print(df['数学'].mode())#数学成绩的众数

8、分位数运算

quantile(q=0.5,axis=0,numeric_only=True,interpolation=‘linear’)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MvUG5NZN-1668690599183)(C:\Users\kzk\AppData\Roaming\Typora\typora-user-images\image-20221117205243265.png)]

五、数值排序与排名

主要采用sort_values()方法

语法如下:

sort_values(by,axis=0,ascending=True,inplace=False,kind='quiicsort',na_position='last',ignore_index=False,key:'ValueKeyFunc'=None)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NVh5n2js-1668690599183)(C:\Users\kzk\AppData\Roaming\Typora\typora-user-images\image-20221117205719685.png)]

【例】根据给定DF按照索引名、列名和数据进行排序

sort_values()方法

import pandas as pd
data_list=[[1,2,3],[4,5,6],[7,8,9]]
df=pd.DataFrame(data_list,columns=['C','B','D'])
df.index=['X','Z','Y','V']
print(df)
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

觉行悟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值