20200303 pandas

昨日内容

1.数据分析的概述 将爬虫爬下来的数据,进行分析,以前使用的是R语言来进行分析,现在的使用Python中 的数据分析库 

2.数据分析的应用 淘宝购物之后,商品推荐,会根据之前用户的浏览日志推荐相关的产品,用户画像 抖音(百度过来的推荐算法团队),快手的推荐算法,投喂 看电影,电影推荐等 

3.数据分析的步骤 提出需求(产品经理或者leader提出) 收集数据爬虫爬取的数据或者掏钱买的 公司自己产生的各种数据 进行数据清洗 数据详细分析,得出结论,图表的形式展示结论 

4.写代码的工具 以前使用的是pycharm,但是现在本次课程使用的是 jupyter 

5.jupyter的安装 命令行安装和启动 (不推荐) pip3 install jupyter jupyter notebook 缺点是:需要额外的在进行安装numpy anaconda安装(推荐) 直接官网下载,傻瓜式安装 点击lunch按钮,直接启动 

6.jupyternotebook的使用介绍 注意:notebook的文件后缀,是以 ipynb 结尾 

7.jupyternotebook的快捷键
两个模式: 编辑模式:光标闪动,颜色是绿色 命令模式:按esc,就能从编辑模式到命令行模式 常见的6个快捷键: 运行当前的代码:crtl + enter 运行当前的代码,并且运行完成之后自动的选择下一个单元格:shift+enter 删除当前单元格:切换到命令行模式,按dd直接删除 在当前单元格的上方添加一个单元格:切换到命令行模式,按a添加 在当前单元格的下方添加一个单元格:切换到命令行模式,按b添加 切换代码模式到标记模式:切换到命令模式,按m进行切换 如果命令不够,可以去键盘处打开命令配置查看 

8.numpy的介绍 核心数据结构是:ndarray 

9.numpy的基本属性 dtype: 数据类型 ndim:数组维度 shape:数组维度,以元组的形式展示 T:转置 (对高维数组而言) 
    
10.numpy数组的创建方式 np.array([1,2,3,3,4]) np.arange() np.linspace() np.linspace? #### 查看函数的使用方法 np.zeros(5) np.ones(5) 

11.数组的索引 一维数组索引 和python的列表用法是一样,都是从0开始 二维数组索引 存在行索引和列索引,需要逗号进行分割,逗号前面是行索引,后面是列索引 布尔型索引 数组可以把布尔值当成索引,来获取对应的值 

12.数组的切片 一维数组切片 和Python中的列表的切片一样,也都是从0开始,前包后不包 二维数组的切片 存在行索引,和列索引,需要逗号进行分割,逗号前面是行切片,后面是列切片

13.通用函数 abs() : 绝对值 ceil(): 向上取整 ceil(4.3) ===> 5 floor():向下取整 floor(5.7) ===> 5 rint() : 四舍五入 rint(3.4) ====>3 sum(): 求和 cumsum() max() min() 
                
14.随机数函数 np.random.rand() np.random.randint() np.random.shuffle() 15.向量运算和矢量运算

pandas

简介

pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。你很快就会发现,它是使Python成为强大而高效的数据分析环境的重要因素之一。

数据结构

Series:一维数组,与Numpy中的一维array类似。二者与Python基本的数据结构List也很相近。Series如今能保存不同种数据类型,字符串、boolean值、数字等都能保存在Series中。

Time- Series:以时间为索引的Series。

DataFrame:二维的表格型数据结构。很多功能与R中的data.frame类似。可以将DataFrame理解为Series的容器。

Panel :三维的数组,可以理解为DataFrame的容器。

Panel4D:是像Panel一样的4维数据容器。

PanelND:拥有factory集合,可以创建像Panel4D一样N维命名容器的模块。

安装

pip install pandas

使用

import pandas as pd
import numpy as np

Series 四种定义方式

s1 = pd.Series([2,3,4,5,6])
s1
0    2
1    3
2    4
3    5
4    6
dtype: int64
s2 = pd.Series([2,3,4,5,6],index=['a','b','c','d','e'])
s2
a    2
b    3
c    4
d    5
e    6
dtype: int64
s1[1]
3
s2['b']
3
s2[2]    # 数字型索引和自定义索引是共存的
4
a3 = pd.Series({'a':2,'b':2})
a3
a    2
b    2
dtype: int64
s4 = pd.Series(0,index=['a','b','c'])
s4
a    0
b    0
c    0
dtype: int64

Series的特性

pd.Series(np.array([1,2,3,4,5]))
0    1
1    2
2    3
3    4
4    5
dtype: int32

矢量运算

s1 * 2
0     4
1     6
2     8
3    10
4    12
dtype: int64
s1
0    2
1    3
2    4
3    5
4    6
dtype: int64

布尔型索引

s1[s1>4]
3    5
4    6
dtype: int64

通用函数

abs(s1)
0    2
1    3
2    4
3    5
4    6
dtype: int64
sum(s1)
20
# 适用于numpy

缺失值数据的处理

st = pd.Series({'sean':12,'yang':15,'cloud':20,'bella':23})
st   # 得到一个Series
sean     12
yang     15
cloud    20
bella    23
dtype: int64

obj1 = pd.Series(st,index=['sean','yang','cloud','rocky'])
obj1
sean     12.0
yang     15.0
cloud    20.0
rocky     NaN
dtype: float64

NAN

# NaN 即是所谓的缺失值

1.为啥值得类型从整型变为了浮点型

扫描二维码关注公众号,回复: 10959425 查看本文章
因为NaN是浮点数类型,其他值兼容,会强制变为浮点型
type(np.nan)
float

2.nan等于谁

np.nan == np.nan
False

3.填充nan

obj1.fillna(0)
sean     12.0
yang     15.0
cloud    20.0
rocky     0.0
dtype: float64
obj1   # 拷贝一份,填充
sean     12.0
yang     15.0
cloud    20.0
rocky     NaN
dtype: float64

4.删除nan所在的行

obj1.dropna()
sean     12.0
yang     15.0
cloud    20.0
dtype: float64
obj1    # 拷贝了一份删除,但是原obj没有更改
sean     12.0
yang     15.0
cloud    20.0
rocky     NaN
dtype: float64
obj1.dropna(inplace=True)   # inplace=True 在对象本身进行操作
obj1
sean     12.0
yang     15.0
cloud    20.0
dtype: float64

运算

两个Series的运算

### 向量运算
s4 = pd.Series({'height':170,'age':18,'salary':2000})
s4
height     170
age         18
salary    2000
dtype: int64
s5 = pd.Series({'height':110,'age':20,'salary':2367})
s5
height     110
age         20
salary    2367
dtype: int64
s4 + s5   # 索引所对应的值进行加减乘除
height     280
age         38
salary    4367
dtype: int64

两个键值都会缺失

s6 = pd.Series({'name':110,'age':20,'salary':2367})
s6
name       110
age         20
salary    2367
dtype: int64
s4
height     170
age         18
salary    2000
dtype: int64
s4 + s6
age         38.0
height       NaN
name         NaN
salary    4367.0
dtype: float64

Series索引

s1
0    2
1    3
2    4
3    5
4    6
dtype: int64

花式索引

# 中括号中套中括号,内层括号中写索引下标
# 获取246 三个值

s1[[0,2,4]]
0    2
2    4
4    6
dtype: int64
arr = np.array([1,2,3,4,5])
arr[[0,3,2]]
array([1, 4, 3])

整数索引

sr = pd.Series(np.arange(10))
sr
0    0
1    1
2    2
3    3
4    4
5    5
6    6
7    7
8    8
9    9
dtype: int32
sr1 = sr[3:].copy()
sr1
3    3
4    4
5    5
6    6
7    7
8    8
9    9
dtype: int32
# 想要获取值为3   不能直接索引取值了
sr1.iloc[0]   # iloc == index + location   以索引下标取值
3
sr1.loc[6]     # 以标签取值
6

DataFrame

DataFrame 是一个表个性的数据结构,相当于一个二维数组,含有一组有序的列.他可以看做成由Series组成的字典,并且共用一个索引

df = pd.DataFrame({'one':[1,2,3,4],'two':[5,6,7,8]})
df

创建方式

one two
0 1 5
1 2 6
2 3 7
3 4 8

猜你喜欢

转载自www.cnblogs.com/fwzzz/p/12733877.html