今天更新一下Pandas的教程,同样还是莫烦老师的视频。Pandas是在numpy基础上发展来的包,可以简单理解为,numpy是数组,而Pandas是字典,为什么这么说呢,Pandas更像是数据库,行和列有对应的名称,所以你可以通过名称来索引某个数据,数据是有名字的,而不仅仅是坐标。一些操作,我感觉也和数据库超像,很惭愧,刚学数据库,我差不多都忘光了,这就是不常温习的后果(赶紧做完这个先刷几道题目)。Pandas分成:创建、索引、导入导出、操作(concat、merge)和绘图
1.创建
1.Series
就是一个列(由于没有制定index(就是行索引),所以默认是012··
1 | import pandas as pd |
2.DataFrame
是一种表格形式的数据结构,每列可以是不同的值类型(注意单列的值类型尽量要一致),DataFrame方法中包含三个参数,第一个是一个array类型的矩阵,index是行索引,column是列索引。没有的话就默认。
1 | dates = pd.date_range('20160101',periods=6) |
3.属性
1.查看类型:
1 | print(df2.dtypes) |
2.查看对列的序号:
1 | print(df2.index) |
3.查看列索引:
1 | print(df2.columns) |
4.查看DataFrame的所有值(这个就是脱掉索引)这个很常见
1 | print(df2.values) |
4.查看数据的总结
1 | df2.describe() |
5.翻转数据
1 | print(df2.T) |
6.排序
排序分成两种,按index(索引)排序,和按值排序
1 | print(df2.sort_index(axis=1, ascending=False)) |
2.索引
DataFrame的性质有点像Defaultdict,就是你给一个不存在的索引,他就会自动添加。当然会有点不一样。
1 | dates = pd.date_range('20130101', periods=6) |
需要指出的一点是,不能直接给行和列索引来选定某一个值,需要用loc。
1 | print(df.loc['20130102']) |
如果忘记了名称怎么办?用iloc,这是根据序列来着。
1 | print(df.iloc[3,1]) |
还有一种和numpy很像的,就是通过判断来选取
1 | print(df[df.A>8]) |
如果是单行或者是单列的情况的话,则可以不用loc,注意对行选取的话,要给定一个范围,有个小细节,如果给的是名称索引的话,是左闭右闭的;给的是序列索引的话,是左闭右开的。
1 | df['F'] = np.nan |
###处理丢失数据
1.如果想直接去掉右Nan的行或列,可以使用dropna
1 | df.dropna( |
2.将Nan的值用其他值替换,比如替换成0,使用fillna:
1 | df.fillna(value=0) |
3.判断是否有缺失数据
1 | np.any(df.isnull()) == True |
3.导入导出
就两个操作嘛,导入和导出。导入就是pd.read_???,什么格式的文件就用什么方法。导出就是data.to_???,要输出什么格式的文件就用什么方法。
1 | import pandas as pd #加载模块 |
4.操作
我个人感觉是最难的一部分。
###1.concat(基本的合并方法)
参数:1.axis(合并方向):
1 | import pandas as pd |
2.ignore_index(重置index):
1 | #承上一个例子,并将index_ignore设定为True |
3.join(合并方式),就两种方式outer就是取并集,inner就是取交集。
1 | import pandas as pd |
2.merge
主要用于两组有key column的数据注意哦,这里是两组。
1.on(就是按什么key来合并,依据索引合并)
1 | import pandas as pd |
2.依据index合并
1 | import pandas as pd |
3.how 就是connect的join。
1 | import pandas as pd |
4.indicator,记录how的方式
1 | import pandas as pd |
5.解决overlapping问题
就是解决索引名称冲突问题
1 | import pandas as pd |
5.Plot(只是其中一种形式)
这里matplotlib只是用来show图片的。
1 | data = pd.DataFrame( |