享有数据分析“三剑客之一”盛名的Pandas,主要包含Series和DataFram两种数据对象。它是一个开源的第三方 Python 库,从 Numpy 和 Matplotlib 的基础上构建而来。Pandas 已经成为 Python 数据分析的必备高级工具,它的目标是成为强大、灵活、可以支持任何编程语言的数据分析工具。
Series:一种类似于一维数组的对象,是由一组数据(各种NumPy数据类型)以及一组与之相关的数据标签(即索引)组成。Series对象可以存储整数、浮点数、字符串、python对象等多种数据类型的数据。仅由一组数据也可产生简单的Series对象。注意:Series中的索引值是可以重复的。
安装pandas
在读取excel文件时还需安装依赖库:
pip install pandas
pip install xlrd # 读取excel
pip install xlwt # 写入excel
引入并创建对象
import pandas as pd # 别名pd
# 创建Series对象 pd.Series(data,index=index),其中data为数据,index为索引值(可省略)默认从0开始,也可以自定义
data = ['张三','李四','王二']
s = pd.Series(data=data)
print(s)
'''
0 张三
1 李四
2 王二
dtype: object
'''
print(type(s))
# <class 'pandas.core.series.Series'>
手动修改索引值:
# 手动修改索引
s = pd.Series(data=data,index=[1,2,3])
print(s)
'''
1 张三
2 李四
3 王二
dtype: object
'''
自定义索引值:
# 自定义非数字索引
data = ['70','80','90']
index = ['张三','李四','王二']
s = pd.Series(data=data,index=index)
print(s)
'''
张三 70
李四 80
王二 90
dtype: object
'''
索引操作
可通过位置索引、标签索引、切片索引对数据进行自定义获取。
位置索引:s[索引值],其中索引值的范围为0-N-1
标签索引:s[索引名称],获取多个索引值可以通过[[索引名1,索引名2,索引名3…]]的方式获取
切片索引:s[start:stop:step],即开始位置:结束位置:步长。其中位置索引进行切片时,含头不含尾,标签索引切片时含头含尾。
位置索引:
# 位置索引
data = ['张三','李四','王二']
s = pd.Series(data=data)
print(s[0]) # 张三
print(s[1]) # 李四
标签索引:
# 标签索引
data = ['70','80','90']
index = ['张三','李四','王二']
s = pd.Series(data=data,index=index)
print(s['张三']) # 70
# 获取多个数据
print(s[['张三','王二']])
'''
张三 70
王二 90
dtype: object
'''
切片索引:
# 切片索引
data = ['张三','李四','王二']
s = pd.Series(data=data)
print(s[1:2:1])
'''
1 李四
dtype: object
'''
属性和方法
获取Series值和索引
通过s.index和s.values的方式获取索引值和数据值。其中获取的值为numpy的ndarray类型,不是列表类型。获取的索引可以转换成列表。
获取索引:
data = ['张三','李四','王二']
s = pd.Series(data=data)
# 获取索引
print(s.index) # RangeIndex(start=0, stop=3, step=1)
print(type(s.index)) # <class 'pandas.core.indexes.range.RangeIndex'>
print(list(s.index)) # 转换为列表 [0, 1, 2]
获取值:
# 获取值
data = ['70','80','90']
index = ['张三','李四','王二']
s = pd.Series(data=data,index=index)
print(s.values) # ['70' '80' '90'] 不是数组
print(type(s.values)) # <class 'numpy.ndarray'>
size,axes,dtype,empty,ndim
-
size:返回输入数据的元素数量。
-
axes:以列表的形式返回所有行索引标签。
-
dtype:返回对象的数据类型。
-
empty:返回一个空的 Series 对象。
-
ndim:返回输入数据的维数。
data = ['张三','李四','王二']
s = pd.Series(data=data)
# size 返回 Series 对象的大小(长度)。
print(s.size) # 3
# 以列表的形式返回所有行索引标签
print(s.axes) # [RangeIndex(start=0, stop=3, step=1)]
# dtype返回对象的数据类型
print(s.dtype) # object
# empty返回一个布尔值,用于判断数据对象是否为空
print(s.empty) # False
# ndim查看序列的维数。根据定义,Series 是一维数据结构,因此它始终返回 1
print(s.ndim) # 1
head()和tail方法
-
head(n):返回前n行数据,默认显示前5行数据
-
tail(n):返回后n行数据,默认显示后5行数据
data = ['70','80','90']
index = ['张三','李四','王二']
s = pd.Series(data=data,index=index)
print(s.head(2)) # 打印前两条数据
'''
张三 70
李四 80
dtype: object
'''
print(s.tail(2))# 打印后两条数据
'''
李四 80
王二 90
dtype: object
'''
检测 Series 中的缺失值
所谓缺失值,顾名思义就是值不存在、丢失、缺少。
-
isnull():如果为值不存在或者缺失,则返回 True。
-
notnull():如果值不存在或者缺失,则返回 False。
ns = pd.Series([1,2,3,None])
print(pd.isnull(ns))
'''
0 False
1 False
2 False
3 True # 不存在,返回True
dtype: bool
'''
print(pd.notnull(ns))
'''
0 True
1 True
2 True
3 False # 不存在,返回True
dtype: bool
'''