记录第 19 天:数据分析

今天又是数据分析的一天。

今天回顾了一下DataFrame 的基本操作,包括添加新列,添加新行,删除列,删除行,以及索引多列多行,还有一些构建,转置,换行等命令。

DataFrame 添加行/列的方式与列表和字典很像,都是直接赋值。对于添加行,可以用DataFrame.loc[row_name] = Series 或者DataFrame.iloc[row_numb] = Series 的方法。对于添加列,可以用DataFrame[column_name]

= Series 的方法。

而DataFrame 删减行/列的方法与列表和字典就有点不同了,列表删除元素的方法是list.pop(index) 或者list.remove(value),字典删除元素的方法是dictionary.pop(key),DataFrame 则是DataFrame.drop(index=[index_names],columns=[column_names])。列表和字典类型更接近于底层数据类型,因此使用了类似栈的pop()方法,而列表类型除了有按照序号删除的功能,还有按照值删除的功能,因此有了remove(),哈哈,我是这么猜的。而 DataFrame 中也有pop() 方法,但是好像只能删除单一列,功能比较简单,所以常用的还是一次性能删除多行多列的drop() 方法。

DataFrame 的多行多列索引方式有两种,loc[ ],和iloc[ ],一个是按名称索引,一个是按排序索引。我查阅相关资料,loc 的索引规则为:loc[[index_name_1:index_name_2],[column_name_1:column_name_2]],两个子列表中的冒号可以换成逗号,代表单独取而非连续取,类似切片的规则。但是有一点容易忽略,就是取所有行时要用冒号代替,如loc[: , [column_name_1:column_name_2]],不能逗号前什么都不填。不知道一贯精简的pandas 为啥要有这种要求。

然后学习了一下从Series 转换到DataFrame 的方法,其实满简单,毕竟他两是 pandas 下的一家人,就用pd.DataFrame(Series) 就可以了。不过要注意的是,这种办法构建的DataFrame 中,是以Series 中的index 为index,也就是说,是纵向生成DataFrame 的,而column 值则是Series 中的name 值。如果想反过来,横向添加数据,即以Series 中的index 为columns 来添加数据的话,可以在生成DataFrame后加一个.T 的命令,将index 和columns 转置。

在运用DataFrame 的过程中我还发现一个很奇怪的地方,就是pandas 中的NaN 可以由pd.Sereis(np.nan)来生成,但是如果判断Series[0] == np.nan 的话又会得到False,真不知道为什么。以后有空再探究下pandas 中的空值问题吧,今天查了蛮久也没找到什么有用的信息。

接下来学习了生成序列的方法。我对比使用了一下python 自带的range(n) 和Numpy 中的np.arange(n),尤其是在计次循环for i in range(n) 中对比用了一下,感觉没啥区别,那干脆以后就用range(n) 吧,这样可以少敲一点字母。

然后是python 的换行方法,哈哈,我学任何一种语言都很关注这个,因为有的时候代码真的是太长了。查阅资料发现python 的换行方法和UiBot 一样,都是空格加反斜杠。这很正常,反斜杠在很多语言里都是转义符的意思,总之就很特殊,发现这一点就好记了。反而是VBA 里比较古怪,是空格加上_ 来表示,怪怪的。

最后学了两个逻辑运算符,in 和not in,这两个运算符用于包含关系判断,前置位放可能被包含的元素,后置位放一个集合元素,这样出来的结果就是False 或者True,代表未包含和包含。

挺好的,收获挺大,明天继续吧~

你可能感兴趣的:(记录第 19 天:数据分析)