前言
本章内容主要记录了4周内的Quiz遇到的一些值得注意的点。
一、Quiz1
本题需要注意的点是,在np的array矩阵中,我们发现reshape中,加不加第二个参数是有区别的,我们来看一下:
可以发现,np中(400,)和(400,1)存在较大的区别,后者就在运算时产生广播效应,前者不会,这是因为,在(400,)中,意思是一维数组,共400个元素,而在(400,1)中,是二维数组,每一行有一个元素,共400行。也可以从形成的角度来看为什么是这样:
这里要注意随机数生成中第二个参数表示产生的列数,且np.linspace的第三个参数是整个数组元素的个数,而np.array的第三个参数是数字元素之间的差,第二个元素是不好包含在内的就可以了
'^’在开头是Anchors位置符,在正则规则中是否定符
贪婪模式下会匹配尽可能多的字段
\s不仅仅包含空格,它也可以用于识别文本末尾的不间断空白符号\xa0,或者全角空白符等等,例如:
区分’?=’ ‘?<=’ ‘?!’ ‘?<!=’,正则规则可见本文第三章
二、Quiz2
np.nan不等于np.nan,np.nan也不等于None,np.nan is None也是错误的,nan只能用np.isnan()来判断
3.
这里是要选错误的,rename返回的是df的一个副本,记得要’保存’或者用inplace=True
df.where不会删除nan的行,会输出nan
类数组对象 (array-like object)可以用于创建Series,dict、array、Series可以创建DataFrame
drop函数默认的参数是index,如果要删除columns需要写axis=1
loc查询的是index的值,iloc查询index的位置
区分method(意思是功能或函数,一般后面会加括号,可以传入参数)和attribute(属性,不能传入参数)
boolean mask操作符是&(和)或者|(或),这里第三项只能得到boolean mask,不能得到df矩阵
如果要查询DataFrame中某行的数据,可以用.loc或者直接转置过来后当列名来直接取,可见本文2.3章
三、Quiz3
merge函数的使用可见本文1.1章
apply函数的使用可见本文第2章
3.
4.
数据透视表可见本文第5章
11.29日周四,月末11月30日周五
分组后用每一组的平均值来填充平均值。
用dict实现对不同列进行不同的聚合函数
9
10.
groupby()内的参数可以是单一列名或者列名的list,默认值axis=0,按一列中不同的行属性分组
四、Final Quiz
re.split()分割后不会保留用于分割的值,长度为3,re.match()和re.search()返回re.Match object,多用于做bool值,也可以在上面找到匹配值和所在位置span,这个object不可以作用len()函数,也不是boolean值,但可以放在if语句中直接充当boolean值:
import re
s = 'ABCAC'
if re.match('A', s) :
print(1)
--Outputs:
1
正则规则中.表示匹配所有字符,?=表示匹配后面的字符但不保存A{3}表示只匹配AAA
Series的省略模式可以直接表示index位置或者index值。
例如,df[0]既可以匹配第0位置上的值,也可以匹配index为0的值,但当index为数字时,pandas会匹配index的值而不是位置,如下,我们看到a[1]在其中无法再匹配1这个位置上的值,二a[0]也只能匹配index为0的值。
df.index得到的是df的index属性,第0个就是‘d’
pandas 中add函数的参数如下:
DataFrame.add(other, axis='columns', level=None, fill_value=None)
fill_value表示对NaN值的填充,默认是无填充,所以两个数据相加如果一个是NaN,那结果就是NaN
df.set_index()会将index删除,reset_index则会保留原index并生成一个正整数列index
apply默认对行进行操作,即传入apply中的参数是df中的每一列
每一次.stack()是把最细分的列变量放到最细分的索引变量中,unstack()则相反,而你可以对所有的df或者Series进行unstack()操作,但不能对Series进行stack()操作(见这篇文章5.4更换数据透视表的形状),这说明行列完全互换,只能用多个unstack()叠加,而不能用多个stack()叠加。