目录
五、案例二(消费金额和小费之间的关联与性别和吸烟与否的关系)
一、什么是Pandas
- pandas 是基于NumPy的一种工具,该工具是为了解决数据分析任务而创建的。
- Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。
- pandas提供了大量能使我们快速便捷地处理数据的函数和方法。
- 它是使Python成为强大而高效的数据分析环境的重要因素之一。
有关Pandas的更多介绍网站:https://pandas.pydata.org/
二、安装Pandas
豆瓣源快速安装:pip install -i https://pypi.douban.com/simple pands
普通安装:pip install pandas
导入Pandas库,一般都会用到numpy库,所以我们需要一同导入:
import numpy as np
import pandas as pd
三、Pandas基本用法
1.pandas创建Series数据类型
Pandas是一个强大的分析结构化数据的工具集;它的使用基础是Numpy(提供高性能的矩阵运算);用于数据挖掘和数据分析,同时也提供数据清洗功能。
利器之一:Series
类似于一维数组的对象,是由一组数据(各种NumPy数据类型)以及一组与之相关的数据标签(即索引)组成。仅由一组数据也可产生简单的Series对象。
利器之二:DataFrame
是Pandas中的一个表格型的数据结构,包含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型等),DataFrame即有行索引也有列索引,可以被看做是由Series组成的字典。
常见的数据类型:
- 一维: Series
- 二维: DataFrame
- 三维: Panel ....
- 四维: Panel4D .....
- N维: PanelND ....
Series是Pandas中的一维数据结构,类似于Python中的列表和Numpy中的Ndarray,不同之处在于:Series是一维的,能存储不同类型的数据,有一组索引与元素对应。
创建Series 数据类型有三种方法:
- 通过列表创建Series对象
- 通过numpy的对象Ndarry创建Serise
- 通过字典创建Series对象;字典的所有key值作为索引,所有的value值作为Series值
import pandas as pd
import numpy as np
import string
# 查看pandas版本信息
print(pd.__version__)
# ********************创建Series对象
# 1). 通过列表创建Series对象
array = ["粉条", "粉丝", "粉带"]
# 如果不指定索引, 默认从0开始;
s1 = pd.Series(data=array)
print(s1)
# 如果不指定索引, 默认从0开始;
ss1 = pd.Series(data=array, index=['A', 'B', 'C'])
print(ss1)
# 2). 通过numpy的对象Ndarray创建Series;
n = np.random.randn(5) # 随机创建一个ndarray对象;
s2 = pd.Series(data=n)
print(s2)
# 修改元素的数据类型;
ss2 = s2.astype(np.int)
print(ss2)
# 3). 通过字典创建Series对象;
dict = {string.ascii_lowercase[i]:i for i in range(10)}
# print(dict)
s3 = pd.Series(dict)
print(s3)
运行结果:
0.23.4
0 粉条
1 粉丝
2 粉带
dtype: object
A 粉条
B 粉丝
C 粉带
dtype: object
0 0.024406
1 -1.819926
2 -0.763840
3 -0.945519
4 -0.763354
dtype: float64
0 0
1 -1
2 0
3 0
4 0
dtype: int32
a 0
b 1
c 2
d 3
e 4
f 5
g 6
h 7
i 8
j 9
dtype: int64
2.Series基本操作
Series 基本操作:
编号 属性或方法 描述
1 axes 返回行轴标签列表。
2 dtype 返回对象的数据类型(dtype)。
3 empty 如果系列为空,则返回True。
4 ndim 返回底层数据的维数,默认定义:1。
5 size 返回基础数据中的元素数。
6 values 将系列作为ndarray返回。
7 head() 返回前n行。
8 tail() 返回最后n行。
例如:
import pandas as pd
import numpy as np
import string
array = ["粉条", "粉丝", "粉带"]
s1 = pd.Series(data=array)
print(s1)
print(s1.axes)
print(s1.dtype)
print(s1.empty)
print(s1.ndim )
print(s1.size)
print(s1.values) #获取所有的value值(不显示索引)
#
# 1). 修改Series索引
print(s1.index)
s1.index = ['A', 'B', 'C']
print(s1)
# 2). Series纵向拼接;
array = ["粉条", "粉丝", "westos"]
# 如果不指定索引, 默认从0开始;
s2 = pd.Series(data=array)
s3 = s1.append(s2)
print(s3)
#
# 3). 删除指定索引对应的元素;
s3 = s3.drop('C') # 删除索引为‘C’对应的值;
print(s3)
# 4). 根据指定的索引查找元素
print(s3['B'])
s3['B'] = np.nan # None, null, pandas数据为空, 或者数据缺失, np.nan
print(s3)
# 5). 切片操作 --- 同列表
print(s3[:2])
print(s3[::-1])
print(s3[-2:]) # 显示最后两个元素
运行结果:
0 粉条
1 粉丝
2 粉带
dtype: object
[RangeIndex(start=0, stop=3, step=1)]
object
False
1
3
['粉条' '粉丝' '粉带']
RangeIndex(start=0, stop=3, step=1)
A 粉条
B 粉丝
C 粉带
dtype: object
A 粉条
B 粉丝
C 粉带
0 粉条
1 粉丝
2 westos
dtype: object
A 粉条
B 粉丝
0 粉条
1 粉丝
2 westos
dtype: object
粉丝
A 粉条
B NaN
0 粉条
1 粉丝
2 westos
dtype: object
A 粉条
B NaN
dtype: object
2 westos
1 粉丝
0 粉条
B NaN
A 粉条
dtype: object
1 粉丝
2 westos
dtype: object
3、Series运算(+ - * /)
import pandas as pd
import numpy as np
s1 = pd.Series(np.arange(5), index=['a', 'b', 'c', 'd', 'e'])
s2 = pd.Series(np.arange(2,8), index=['c', 'd', 'e', 'f', 'g', 'h'])
print(s1)
print(s2)
# 按照对应的索引来进行运算,如果索引不同,则填充为Nan
# 加法, 缺失值 + 真实值 = 缺失值
# print(s1+s2)
print(s1.add(s2))
# 减法
# print(s1 - s2)
print(s1.sub(s2))
# 乘法
# print(s1 * s2)
print(s1.mul(s2))
# 除法
# print(s1 / s2)
print(s1.div(s2))
# 求中位数
print(s1)
print(s1.median())
# 求和
print(s1.sum())
# max
print(s1.max())
# min
print(s1.min())
运行结果:
a 0
b 1
c 2
d 3
e 4
dtype: int64
c 2
d 3
e 4
f 5
g 6
h 7
dtype: int64
a NaN
b NaN
c 4.0
d 6.0
e 8.0
f NaN
g NaN
h NaN
dtype: float64
a NaN
b NaN
c 0.0
d 0.0
e 0.0
f NaN
g NaN
h NaN
dtype: float64
a NaN
b NaN
c 4.0
d 9.0
e 16.0
f NaN
g NaN
h NaN
dtype: float64
a NaN
b NaN
c 1.0
d 1.0
e 1.0
f NaN
g NaN
h NaN
dtype: float64
a 0
b 1
c 2
d 3
e 4
dtype: int64
2.0
10
4
0
4、特殊的where方法
where方法:类似于三元运算符,满足条件不做改变,否则赋值为其他值