我们都知道数据分析的三剑客--numpy,pandas,matplotlib(这个也可以用一个叫plotly的库)
- numpy:主要用于数据科学计算
- pandas:主要用于数据处理,这个能力比numpy的数据处理能力更好
- matplotlib:主要用于数据可视化的
pandas介绍
- pandas是基于numpy构建的库,pandas与numpy区别主要在于pandas有两种特别的数据结构:Series和DataFrame,根据我的学习这两个其实对应的就是python中的字典和数据库中的数据表,我们接着看
- 此外,为什么pandas的数据处理能力比numpy更好,因为pandas除了上面说的这两种数据结构很好之外,另外就是pandas提供了强大的IO读取工具,CSV格式,Excel文件,数据库都可以很方便的读取,而且DataFrame和这几种文件都很像,对于大数据,pandas支持大文件的分块读取
- 对于数据清洗来说,可能数据集中有一些缺失值,pandas把各种类型的数据缺失值统一称为NaN,NaN官方说明是float类型,None == None---->True,但是np.nan == np.nan---->False,但是对于is的话两者都是True
- 对于分析建模是最重要的,pandas有自动数据对齐特性,通过这个特性,可以很方便的将数据集进行拆分-重组
最后的数据可视化的事情就交给matplotlib来做了
Series
- 是numpy.ndarray(多维数组)的子类
- 数据类型是支持泛型的,也就任何类型都可
- 索引不需要按照顺序
- 可以有重复的数据
- index不像字典的key,可以是可变对象
Series类似于一维数组又有点类似于有序的字典(我们知道python中的字典是无序,我们可以通过for来验证,虽然Collections中有OrderedDict是有序的,set也是无序的,set不是Iterable)。并且Series的index和value之间是独立的,且这个index可以是可变对象
Series的两种生成方式
1.
可以看到,这里我们的index就是一个list,是可变对象,但是我们一般还是用不可变对象来做index
2.
可以看到没有设置index的话,会直接帮我们生成默认的index
当然我们还可以根据字典来生成Series:
这样是不是就生成了NaN了,并且类型变成了float64浮点类型了,所以官方解释说NaN是float类型
这也算字典生成Series:
查看Series
NaN的查询方式:
嵌套查看NaN:找出那对value为NaN的index-value,返回那对index-value
查看非NaN的个数:
data2.count()
Series的自动对齐功能
我一开始一直在想什么是自动对齐,学到才觉得确实很好用
光会用没什么,主要是我们要发现更深入的东西,我们会发现,什么东西和NaN进行运算都会变成NaN,就像个黑洞一样,计算机中有很多用到类似的思想,比如bit 0与任何东西&都是0,Linux中dev下面的null设备(设备就是对应成一个文件),可以接受任何输入且不返回任何结果,可以将不需要打印出来的消息输出到null设备中去。路由交换中路由也有一个叫什么null的逻辑接口,用于防止路由环路和过滤数据包
Series的name属性
Series对象本身和index都有一个name属性,name在DataFrame能够发挥很大作用,当我们将一个Series对象放进DataFrame中,这个Series会变成DataFrame中的一个列,就和数据表类似,列肯定要有列名,这个列名就是Series对象的name属性,如果我们没有对该Series对象进行命名,则DataFrame会自动帮我们命名为 0
DataFrame
- numpy中array-like
- 每一列可以有不同的类型,且每个元素都可以不同类型,数据库中每一列是需要同类型的
- 通过行,列来索引
- 可以删除行也可以删除列
生成DataFrame对象
非常像数据库中的数据表
那可不可以这样呢?
答案是不可以,会报错,说需要相同的长度
查看DataFrame属性
DataFrame的索引
取一行:
这两个是一样的,我们取的是一个1号行
DataFrame的常用操作
增加一列
增加一行
删除行或者列
删除列
删除行:用drop方法,不能用del,会报错,但是drop方法返回的是copy而不是真正的数据,要在源数据里面删除的话需要设置inplace=True
设置某一列为index
这并没有在源数据上面进行修改
在原数据上面修改
将index列还原
处理缺失值
第一种:丢弃含有缺失值的行
dropna([inplace])
第二种:填充缺失值数据
fillna(filldata[,inplace])
数据合并:类似于数据表的连接操作
例如:pd.merge(data,data1,on='columnname',how='left')
数据合并之后可能会有重复值,我们可以用data.drop_duplicates(inplace=True)