00:00
我们先把今天的这个数据预算给大家看一下,这个东西是很重要的啊,极其重要,非常重要,特别重要,很重要的事情我要说很多遍啊,这一块特别的重要,我们先把啊,没有去创建我们的那个pandas,首先第一个我们要去引入pandas这个包,叫做import pandas,然后as pd,那么基本上都是要这样子去做引用啊,那么NT没有定义,我们再去定义一下NT,那么就是import。Five,然后SNPOK,那么这样的话,我们生成了A和B2个,一个是serious,一个是data free,我们今天要做的就是第一节课,我们要做的就是把这个serious和data frame的这种map和apply和apply map这些给大家去说明白,Map。大家在Python里边是不是有map这个函数呀,那么map这个函数是干用的,Map这个函数是干嘛用的什么?把一堆数加起来,把数放到函数里,是不是我可以这么理解啊,我不知道你们说把数放到函数里到底是什么意思,就是比如说我们是有一个这个container或者是列表或者是字典,对吧?然后我们可以把字典或者列表里边的每一项,单独的每一项都当做一个参数放到这个map的这这这个参数的那个函数里边,那么通过这个参数的函数会去做做一些个操作,对吧?然后呢,然后这个东西会被返回到这里吗?还是说会给我们返回一个新的列表或者字典或者对吧,就会返回给我们一个新的东西啊,然后ma本身这个东西是迭代器吗?返回一个迭代器吧,啊,返回一个迭代器啊,我不懂啊,问一问好,那么我们来看一下我们在这个series里边的一个买房与我。
01:51
我们在拍子里边的map是很相近的,首先我们来看一下,我们这里面有一个A啊,AA这个东西,我们可以给它定义一个函数,直接复制过来啊,就不写了,也快一点啊,那么这个函数就是接收一个数据,这个数据把它加上五减去二,那么这个操作就是相当于是加三对吧?加三对于每一个数据都去加三,OK,我们把函数给它定义出来。
02:18
H定义完了之后,我们可以用a.map的这样的一种方法,让我们的A中的每一个元素,A中的每一个元素是不是9876,然后每一个都去加上三,并且最终返回给我们一个series啊,每一个都加三,最终返回给我们一个series。它返回给我们一个serious,注意这里面依然是我们的那种叫做矢量化运算,我之前没有说过量化运算,对吧?啊,没有说过矢量化运算,我来说一下什么叫做矢量化运算,就是我们我们之前有说过这样的一个指条啊,就是我们有一个东西啊,有一个函数,它里边叫做serious,说错了,不是函数啊,我们有一个结构叫做serious,当我们这个serious去做加上某一个数值,比如说加上四的时候。
03:09
那么它会应用叫做矢量化运算,什么意思?就是在第内的每一个元素同时去加四,也就是说这个东西加四,这个东西加四,这个东西加四,它是同时去下加的,这个我之前说过吧。啊,这一段他们是同时去下降的,也就是说相当于是一个并发的过程,而我们如果用正常的这个列表啊,用正常的这个列表,那么它就不是一个并发的这种情况,它就是一个要循环的去加完这个,再加这个,再加这个啊所以它是不一样的一个方法,上面的这种同时去做相加相减,这种叫做矢量化运算,矢量矢量化运算大家知道矢量是什么,不知道是吧?矢量我还没讲到,来给大家说,你们听说过向量吗?也没听说过,你们听说过标量吗?都没听说过是吧?给大家说一下这个稍微去解释一下啊,矢量就等于是向量啊,那向量或者是矢量是什么东西啊,是说我们在一个这个叫做坐标里边。
04:20
本身它可以去某一个点,比如说这个点叫做叫什么呢?叫做一二啊,一二的这个点,那么如果是一二的这个点,我们实际上可以从原点出发去指向一二的这个点,然后画一个箭头,那么它就标志着两个事情啊,两个事情第一个是本身我们的这个量它是有一个方向的,是不是它针对于原点是有一个方向呀,还有一个方向性,那么第二个它本身从原点到它的这个地方是有一个距离的。啊,是有一个距离的,那么这个距离加上这个方向就是我们的这个叫做矢量啊,就是我们这个矢量啊,就是它既有方向又有距离,如果你单纯描述距离,是不是这距离跟它也差不多呀,那么就没有方向,那么标志了方向和标志了距离,那么就有唯一的一种情况给它做对应,所以我们这个东西叫做矢量,那什么叫做标量?标量的意思就是它只有距离而没有方向啊,只有距离而没有方向,比如说这是一个距离吧。
05:26
那这个距离的标量就等于这个距离的标量啊,就是它俩都都是一样的这个东西,比如说长度是一,那这个东西长度也是一,那一就等于一,这是标量,如果说这个长度是一,但是它加了一个方向,而这个长度是一,它加了一个方向,它们俩就不相等,因为他们是矢量,他们俩就矢量,因为它方向不相等,它也不相等,只有方向相等,距离相等的时候,它才相等,就是这个标量和矢量的一个区别,后续的话我们会讲到啊啊继续,那么我们这个a.map说刚刚我们说的这个map。
06:03
啊,这个map对于这个map来说,它一样是矢量化的预算,什么意思?也就是说我们map是不是我们的一个series去接收一个叫做函数呀,啊接收一个函数,那么实际上它就是把它内部的每一个元素都同时的单独的去调用这个F,并且最终把它们再放到一个新的series里面,啊放到一个新的series里面,这就是一个新的series,所以它就是这样的一个过程,一样是一个矢量化的过程,它比我们的那个map就是我们。Python里面的那个,Python里面的那个叫列表,列表是不是可以是列表的map呀,啊列表的那个map法要快很多,因为它也是矢量化的运算啊,它也是矢量化的运算,所以这就是这样的一种情况啊,那么它就是内部就是能够去相加,好那么再往下我们来看,如果是data frame,我们想要去实现这种矢量化的运算,怎么去做,我们来看一下。
07:08
如果是data frame,我们可以把B复制过来,看一下B里边有这些个数字,那么如果我们要对这些个数字进行一个叫做叫什么呢?矢量化的一个。运算我们来看就必须使用的是这个叫做apply函数,我们把这个函数拿过来定义一下啊,这是一个函数,那么这个函数我们先把最外最后面这个输出给它关掉,我们先打开这个最小啊,先打开这个最小,那么打开这个最小之后,我们来看,对于每一个X,我们返回的是x.me来我们B,比如说我们下一个就执行啊,先把它执行一下,我们下一个就要执行的是b.a。括号,括号里面就是FV啊,我们用B点拉F,那我问一下这个地方它要去对于B的每一每一什么,这是什么行啊,他要对B的每一行去做运算,对B的每一行去做运算,这个地方说我要找到这一行,我们之前说过这一行它是不是一个serious呀?这个serious.me就是找到这一行里边的最小值给它输出了吧?所以当我们把这1234都找到最小值之后,它是不是就由二维的变化成了一维的了,那么也就是说它应该会给我们输出的一个东西叫做serious。
08:34
我们来看一下是不是这个样子啊,来,那么就是对于每一行都执行x.me然后把x.me拿出来之后,那么对于每一个C它都是一个数,每一个A是一个数,每一个B是一个数,每一个B是一个数,大家应该会给我们返回四条数据,每一条数据里边只有一个最小值的series,如果是二维的,它就叫data frame,如果是一维的就叫serious,我们来看一下是不是这个比,它是不是跟我们说的不一样啊,它跟我们说的不一样,原因是在于说他的apply啊,他的apply。
09:07
是按照每一列每一列去做计算的吧,对吧,按照每一列每一列去做计算啊,因为我刚才记得是列,然后看这个地方,他说按列计算要加一个这个东西,我觉得A是不是按行计算吧,来它是按每一列每一列去做计算,我们再来看一下这个,如果我们给它加一个按行计算的话,就是AX is等于零,诶我想一下啊,如果是按行计算,应该是等于零稍等啊,我要捋一下这个这个关系啊,首先这个东西是01234,那么就是每一列取了一个最小值对吧,每一列取了一个最小值,没错,那么我用AX is等于零,零应该是默认按行来去做计算啊,我们来看一下好看,不知道的话就百度是吧,百度我们的这个apply看看,看一下它的这个官网的内容啊,它的第一个叫做如果是零。
10:07
就认为它是index,这不是按index不是这个吗?就是这一对是index对吧?那么如果是零的话,就是index,默认的就是零,Function to apply to each column or room,我理解的有问题吗?我想一下啊,我来我先给大家去翻译一下,然后再去理解这个意思啊,这个意思是说我们的这个函数会被应用到每一列或者是每一行,那么如果是零的话,或者是index的话,它的每一个function就会被应用于每一列啊,如果我终于明白了它这个地方是一个反的,对吧?如果我们指定的是行的话,它的这个方式就会被应用于每一列,如果我们指定的是这个地方,指定的是一,那么就是列的话,它就会被应用于每一行,看到没,前面如果是column,就会被应用于每一行,前面如果是in,对词就会被应用于每一列,OK,那么。
11:07
这个地方大家一定要多去看官网啊,不看官网就有可能会有问题啊。那么这个地方的话就是叫做如果是我们指定的是零,它就会被应用于每一列,如果我们指定的是一,它就会被应用于每一行啊,这竟然是反着来的,竟然是反着来的,感觉跟我们正常的思维是有差别的啊,有差别啊,那么这是我们这个A,也就是说我们a apply在默认的时候,它的axis等于零,一般的时候都是默认的时候axis等于零,但是asxis等于零的时候,也就是说按行的时候,它是按每一列去应用到我们的这个F啊,所以这种情况下,它就会执行出我们这样的一个结果,OK,那么这个就apply就结束了。最后一个还有一个叫做apply ma啊,就是叫做b.a apply ma,那么这个是干嘛?它的意思是指说在我们整个的data frame上面对于每一个元素都去做一遍。我们。
12:13
指定的那个函数,比如说我们可以把上面指定的这个函数给它做一个叫做叫什么呢?我马上复制,复制下来啊,复制下来呃,给它新添加一个,先添加一个,我们给它叫做一个叫做X乘以二啊,X乘以二,那么如果我们把这个X放到这个位置的话,是不是它就应该给我们生成的是每一个元素都乘以二以后的一个结果呀。我们来看一下是不是这个样子啊,是不是变成02468,然后零十二十三十,那么这就是上面这个值,每一个都去乘以二,那么刚刚我们就讲完了这三个函数啊,这三个函数,那么这三个函数它的作用就是我们可以自己去定义一个函数,去对于每一行,或者是每一列,或者是每一个元素的一个什么样的操作,并且它的这种操作比我们写循环要快很多,那么这种呃是比较好用的,比较好用呃下一个就是这些东西啊,这些东西我之前应该都给大家讲过一些,对吧?比如说describe啊,比如说那么这个叫做地点describe,这个东西会经常会用到,大家还记得这里面描述的是什么样的信息吗?描述有count,哎,这个地方写的是吧,有计数平均数,标准差,然后最小值四分,四分位数和最大值,那么这个四分位数就有一分为二。
13:42
可三分位我们可以看一下啊,B点写错了,B点来看,那么这个地方就是总共有多少个数值,这里写的是4.0,那么就应该是有叫做12344行啊,有四行,然后下面就是面什么std什么这些东西,好那么我们看它上面说了一个事情啊,就是大部分的函数都可以去加这个AX saxis等于一,因为它默认的都是axis等于零,那么这个东西有吗?如果我记得没错的话,我没记得有啊,AX等于一,我来试一下没有啊,拼错了AX is等于一,没错呀,没错,它就是没有AX is等于一的这种。
14:23
叫做属性啊,那么如果你要知道这个东西到底有没有这个属性,依然可以在我们这个百度里面去搜搜这个describe pandas,那么就有这个,呃,Documentation在这里面你就能够看得到它有没有包含我们的那个,这就是paraters啊,它没有包含我们的那个axx,以describe是没有的,这个describe是没有,然后那么来看这些信息,大家是不是都有啊,比如说我们通过最小值一分位,二分位,三分位,是不是就能够去画出我们的那个叫做相线图呀,对吧,通过这个这个这个这个这个就能够画出相线图,那么这些就都是它的一个叫做标准差,这些是它的一个平均数,那么这些信息的话,是能够标志的出一个数据的分布状态是什么样子啊,分布状态啊,那么再来。
15:14
下一个事情就是some some,这个应该不,呃,我们就演示一下吧,稍微演示几个,剩下的话大家呃,自己去看就行,但是最后这两个是我们必须要去多说一点,剩下这些我们之前都演示过,什么平均数啊,什么中位数,这个是什么来着,众数对吧,我昨天讲过,这个叫众数,这个叫做。方差这个叫做标准差,这个叫做最小值,这个方最大值,我们先把这个萨姆试一下,然后就结束啊把萨姆试一下,那么就是叫做B点萨姆括号看那么b.sum我们先把B给大家再看一遍,就是它是按照每一行去给我们01234,它是按照这个每一列去给我们做的一个叫做求和对吧,每一列给我们去做的一个求和,那么每一列做完求和之后,它的那个这个东西叫做这叫啥来着?Index对吧?它的serious的一个index是不是就我们上面的这个column呀,对吧?然后我们也可以去给他一个叫做AX is等于一啊等于一,那么如果等于一的话,它是不是应该就是abcd了,我们来看一下是不是这个样子啊,就是十三十五,这加起来是十,这加起来35是六十八十五啊,它就是按照这样的一个顺序来去做的啊,那么这些的话都应该是按照刚刚的那个,但是有一个东西是很重要的。
16:37
这叫做IDX幂啊,再说一遍,叫做IDX幂,这个东西是干嘛?是说我们要去找到最大的那个值的ID index是什么?我们来看一下,如果我们要去找B的那个最大值的和对应的那个index,它是最小值是吧?
17:01
面是最小值,说错了是吧?面in是最小值,那么这个最小值所对应的那个index啊,所对应的那个index你看是不是都是C啊对吧?都是C啊,都是C,也就是说第零个第零个啊第零呃列啊,第零列它是C是最小值,第一列它C是最小值,第二列它C最小值,如果我们把第,我们要去设置这个第这个这个这个这个这什么C啊C这一列的第一个一呃CO6公的这个值要给它做一个修改,我们要怎么去修改,比如说我们要给它修改成20,是不是就应该是b.log中括号引号C,然后中括号几一对吧,中括号一,然后也就等于20,那么这样的话,B它应该就有一个20的一个变化,那么如果把这个20加上了之后,我们再去找它的inex幂啊,Inex幂最小值,那么就是b.in。
18:02
诶,多写了一个inex来,我们来再去看一下它是不是这个就变成A了,因为这个20已经大于它了啊,所以这是一个index,那么我们经常会做的就是去求出某行啊,求出某一行或者是某一列它的最小值是什么,如果我们去给它变成叫做AX is等于一,那是不是它就会去说这一行里面的最小值的index对应的是零还是一还是二,还是三还是四呀,对吧?我们来看一下是不是这个样子,这一行里面的最小值都是对应的是零的这一页零的这个0000,但如果我们去给它做一个修改,比如说就是叫做B中括号零,然后是中括号引号D是D吧abcd啊,也就等于50啊可以吧,等于50,这么复值行不行?可以这么复值,可以的话来,那么我们刚刚是这样赋值的,那么还可以这样去赋值,这样赋值之后我们再来。
19:02
看一下B的一个结果,它就变成了这是50了,那么这是50了之后我们再调用这个东西,它是不是应该就有变化了,看一下,那么D就应该指的是第一个是,所以这是I didx幂,那么同样你也可以去做这个idx max,还有一个问题就是我们这里面是能够找到说每一行或者是每一列的最小值,其实我们最常用的是说只去找某一列的最小值所对应的那个index是多少,那么其实是这个样子啊,就叫做就叫做B中括号,如果我们要找的是某一列的最小值是不是就是B中括号,比如说我们要找第一列的最小值B中括号一,然后点idx幂括号,那么就是我们可以通过这样的方式去找啊,可以通过这样的方式,那么来,他说只适用于,只适用于serious的是这个,但是这一个好不好使,我我不太确定啊,我我记得以前我都用的是。
20:02
这个来试一下好不好写,可以啊可以,那么同样这个东西也可以把它改成这个个啊,也可以改,把它改成这东西叫做阿个me,我们来试一下阿个me啊,他又给我们报了个错,但是他给我们输出正确结果了啊,来看叫做ain is deprecated,然后用index me,那也就是说ain已经大家不希望他再用了,希望用的是这个应对面这一个可能跟版本有关系啊,因为我之前用的那一个版本,呃,我估计第一节课你们也看到了啊,我第一我之前用的那个版本跟现在这个版本是不一样啊,我估计跟版本有关,我的那个版本里面没有报这个问题啊,所以我估计是后面的版本是说尽量不要用这个函数去做了,要用这个in me这个函数好,那么大概也就是这些。
我来说两句