目录
Pandas介绍与安装
为什么会有Pandas?
Pandas支持大部分Numpy语言风格,尤其是数组函数与广播机制的各种数据处理。但是Numpy更适合处理同质型的数据。而Pandas的设计就是用来处理表格型或异质型数据的,高效的清洗、处理数据。
Pandas是什么?
Pandas是基于Numpy的一种工具,提供了高性能矩阵的运算,该工具是为了解决数据分析任务而创建的。也是贯穿整个Python数据分析非常核心的工具。
Pandas涉及内容
Pandas安装
直接在dos命令行中pip install pandas
即可。
Pandas基础数据结构
Series
Series介绍
Series是一种一维的数组型对象,它包含了一个值序列(values),并且包含了数据标签,称为索引(index)。
Series创建
pd.Series(data=None,index=None,dtype=None,name=None,copy=False)
- data:创建数组的数据,可为array-like, dict, or scalar value
- index:指定索引
- dtype:数组数据类型
- name:数组名称
- copy:是否拷贝
data可为iterable, dict, or scalar value
import pandas as pd
pd.Series([1,2,3,4,5,6]) # data为iterable
索引默认为range(0,n) 可以通过index指定索引
pd.Series([1,2,3,4,5],index=list("abcde"))
数据类型根据data自动调整,但是也可以通过dtype指定
pd.Series(np.random.randint(1,10,size=5),dtype="float")
使用name参数设置数组名称
pd.Series(np.random.randint(1,10,size=3),index=list("abc"),name="data_name")
除此之外,Pandas可以使用Numpy的数组函数。
- s.dtype # 查看数据类型
- s.astype() # 修改数据类型
- s.head(n) # 预览数据前5条
- s.tail(n) # 预览数据后5条
但是如果需要显示所有数据,则需以下代码。但并不建议使用
#显示所有列
pd.set_option('display.max_columns', None)
#显示所有行
pd.set_option('display.max_rows', None)
#设置value的显示长度为100,默认为50
pd.set_option('max_colwidth',100)
series的索引与值
- s.index # 查看索引
- s.values # 查看值序列
- s.reset_index(drop=False) # 重置索引
-
- drop # 是否删除原索引 默认为否
注意
- 索引对象是不可变的,所以不能单个修改索引
Series索引与切片
- s['标签'] # 通过标签
- s['索引'] # 通过索引
- s.loc(标签) # 通过标签
- s.iloc(索引) # 通过索引
Series运算
- 共同索引对应为运算,其它填充NaN
s1 = pd.Series(range(10,20),index=range(10))
s2 = pd.Series(range(20,25),index=range(5))
s1+s2
- 没有共同索引时,则全部为NaN
DataFrame
DataFrame介绍
DataFrame表示的是矩阵的数据表,它包含已排序的列集合,每一列可以是不同的值类型(数值,字符串,布尔值)。在DataFrame中,数据被存储为一个以上的二维块。
DataFrame创建
pd.DataFrame(data=None,index=None,columns=None,dtype=None,copy=False)
- data:创建数组的数据,可为ndarray, dict
- index:指定索引
- dtype:数组数据类型
- copy:是否拷贝
重置索引
除了创建时可以指定,我们创建后还可以通过df.reindex()进行重置索引。
- df.reindex(index=None, columns=None, axis=None,fill_value=nan)
DataFrame基础操作
- df.shape # 查看数组形状,返回值为元组
- df.dtypes # 查看列数据类型
- df.ndim # 数据维度,返回为整数
- df.index # 行索引
- df.columns # 列索引
- df.values # 值
- d.head(n) # 显示头部几行,默认前5行
- d.tail(n) # 显示末尾几行,默认后5行
- d.info() # 相关信息概述
data = [
{"name":"amy","age":18,"tel":10086},
{"name":"bob","age":18},
{"name":"james","tel":10086},
{"name":"zs","tel":10086},
{"name":"james","tel":10086},
{"name":"ls","tel":10086},
]
d2 = pd.DataFrame(data)
d2.head()
d2.tail()
d2.info()
DataFrame查数据(索引与切片)
直接使用索引与标签:
使用loc及iloc查询数据
- df.loc[] 通过轴标签选择数据
- df.iloc[] 通过整数索引选择数据
具体使用如下:
DataFrame修改数据
修改数据主要遵循以下两点:
- 查询数据
- 再赋值
注意
Pandas中可以直接赋值np.nan,且赋值当前列数据会自动转为浮点类型。而不是整个数组都转,这主要是因为Pandas数据可以是异质性。
DataFrame新增数据
新增列:df["新的列标签"] = 值
注意:添加列,则新添加的值的长度必须与其它列的长度保持一致,否则会报错。
插入列:如果需要在数据中插入列,则使用 df.insert(loc, column, value)
- loc 为插入列的位置
- column 为插入列的标签
- value 为插入列的值
添加行:df.loc["新的行标签",:] = 值
除此之外,我们还可以通过 df.append(df2)
方法添加行,但类似于数组与数组的堆叠拼接。所以df2的列索引必须同df一致。
DataFrame删除数据
法1:del df["列标签"]
法2:df.drop(axis=0,index=None,columns=None, inplace=False)
DataFrame算术
实际上,通过 + - * / // **
等符号可以直接对DataFrame与DataFrame之间或者DataFrame以及Series之间进行运算。但秉承的原则就是对应索引运算,存在索引不同时,返回结果为索引对的并集。
但是实际操作会发现,当存在索引不同时,返回的值自动填充NaN。
使用填充值的算术方法
注意
- Series使用算术方法,不支持指定填充值
描述性统计的概述和计算
DataFrame排序
- df.sort_index(axis=0,ascending=True) # 索引排序
-
- axis指定轴,默认为0轴
- ascending为排序方式,默认为True表示升序
- df.sort_values(by) # 值排序
-
- by指定一列或多列作为排序键
注意
- by = [col1,col2] 是先给col1排序 当col1有相同值时,col2中按排序顺序再排序
函数应用于映射
- df.apply(func, axis=0) # 通过 apply 将函数运用到列 或者 行
- df.applymap(func) # applymap将函数应用到每个数据上