学习目标:
掌握python的数据选择提取与切片方法
了解python的数据拼接与合并
掌握python的数据算数运算与比较运算
掌握python的数据统计分析运算
掌握python的数据排序与排名方法
NumPy数组索引所包含的内容非常丰富,有很多种方式选中数据的子集或者某个元素。主要有一下四种方式:
基础索引 获取单个元素
切片 获取子数组
布尔索引 根据比较操作,获取数组元素
数组索引 传递索引数组,更加快速、灵活的获取子数据集
数组的索引主要是用来获得数组中的数据,在NumPy中数组的索引可以分为两大类:一类是一维数组的索引,二是二维数组的索引。一维数组的索引和列表的索引几乎是相同的,二维数组的索引则有很大不同
沿着单个轴,整数做下标用于选择单个元素,切片做下标用于选择元素的范围和序列,正整数用于从数组的开头开始索引元素(索引从0开始),而负整数用于从数组的结尾开始索引元素,其中最后一个元素的索引是-,第二个到最后一个元素的索引是-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]
布尔索引
我们可以通过一个布尔数组来索引目标数组,以此找出与布尔数组中值为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
变量名[index]:idnex对应的值
变量名[[index1,index2,index3,·····]]:依次提取对应行的值
变量名[下限index1:上限index2:步长]:在下限的基础上,取出步长的行,并遇到上限就截止
使用单个值或序列,可以从DataFrame中索引出一个或多个列
df.列名 :取出单列,输出格式为Series
df[列名]:取出单列,输出格式为Series
df[[列名]]:取出单列,格式为DataFrame
df[[列名1,列名2,列名3,······]]:取出各个列对应的元素,输出格式为DataFrame
【例】通过切片方式选取多行
关键技术:这里使用的是一个中括号,这里的2代表步长:[“张某”:“段某”:2]=[下界:上界:步长]
print(df["张某":"段某":2])
有时候,我们需要将一些数据片段进行组合拼接,形成更加丰富的数据集。pandas库提供了多种合并方法:mesge()/join()/concat()等
语法:
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)
关键技术:使用’id’键合并两个数据帧,并使用merge()对其执行合并操作,
print(pd.merge(left,right,on='id'))
关键技术:使用’id’键及’subject_id’键合并两个数据帧,并使用merge()对其执行合并操作
print(pd.merge(left,right,on=['id',subject_id]))
【例】使用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'))
用于将序列中的元素以指定的字符连接生成一个新的字符串,join()数据帧的语法参数如下
DataFrame.join(other,on=None,how=‘left’,Isuffix=‘’,rsuffix=‘’,sort=False)
将两个数据表切片数据进行合并
df1=df[3:9][['序号','销量']]
df2=df[3:9][['天气','是否周末']]
print(df1.join(df2))
可用于横向和纵向合并数据。
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)
>=
==
<=
得到布尔值
【例】计算数据集每列非空值个数情况
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())
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))
mean()函数实现行/列数据均值计算
mean(axis=None,skipna=Nona,level=None,numeric_only=None,**kwargs)
参数定义与sum相同
【例】统计数据的算数平均值并输出结果
print(df.mean(axis=1))
max(axis=None,skipna=None,level=None,numeric_only=None,**kwargs)
【例】统计数据的最大值并输出结果
print(df.max(axis=1))
min······
print(df.min(axis=1))
median······
如果是偶数个,则中位数为中间两个数的均值
import numpy as np
a=np.arry([10,7,4],[3,2,1])
print(a)
np.median(a)
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())#数学成绩的众数
quantile(q=0.5,axis=0,numeric_only=True,interpolation=‘linear’)
主要采用sort_values()方法
语法如下:
sort_values(by,axis=0,ascending=True,inplace=False,kind='quiicsort',na_position='last',ignore_index=False,key:'ValueKeyFunc'=None)
【例】根据给定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)