点击蓝字
節
关注我们
·基本运算符·

# 数组在运算的时候是按照位置一一对应计算,而列表相加则为拼接
ar1 = np.array([11,22,33,44])
ar2 = np.array([55,66,77,88])
ar1 + ar2
array([ 66, 88, 110, 132])
ar1 ** 2
array([ 121, 484, 1089, 1936], dtype=int32)
ar1 > ar2
array([False, False, False, False])
# 数学运算符
+数组对应元素的加和
-数组对应元素的差
*数组对应元素的乘积
/数组对应元素商
//数组对应元素整除数
%数组对应元素余数
**数组对应元素的幂指数
# 比较运算符
>
等价np.greater(arr1,arr2)
判断arr1的元素是否大于arr2的元素
>=
等价np.greater_equal(arr1,arr2)
判断arr1的元素是否大于等于arr2的元素
<
等价np.less(arr1,arr2)
判断arr1的元素是否小于arr2的元素
<=
等价np.less_equal(arr1,arr2)
判断arr1的元素是否小于等于arr2的元素
==
等价np.equal(arr1,arr2)
判断arr1的元素是否等于arr2的元素
!=
等价np.not_equal(arr1,arr2)
判断arr1的元素是否不等于arr2的元素
# 函数 #

# 函数相当于是工具 具有一定的功能 调用即可使用
# 内置函数:解释器自带的已经写好的
# 自定义函数:自已定义,调用即可使用
# 常用的数学函数
1.np.round(arr)
对各元素进行四舍五入
np.round(np.array([1.6,2.2,4.6,9.8]))
2.np.sqrt(arr)
对各元素进行算术平方根
3.np.square(arr)
计算各元素的平方值
4.np.exp(arr)
计算以e为底的指数
5.np.power(arr, α)
计算各元素的指数
6.np.log2(arr)
计算以2为底各元素的对数
7.np.log10(arr)
计算以10为底各元素的对数
8.np.log(arr)
计算以e为底各元素的对数
# 常用的统计函数(必会)
所有的函数默认都是针对所有元素 不区分行列
np.min(arr,axis)
按照轴的方向计算最小值
np.max(arr,axis)
按照轴的方向计算最大值
np.mean(arr,axis)
按照轴的方向计算平均值
np.median(arr,axis)
按照轴的方向计算中位数
np.sum(arr,axis)
按照轴的方向计算和
np.std(arr,axis)
按照轴的方向计算标准差
np.var(arr,axis)
按照轴的方向计算方差
注意:
axis=0时,计算数组各列的统计值
axis=1时,计算数组各行的统计值
随机数模块

# python中random模块
利用random模块产生验证码(随机数字 大写字母 小写字母)
'''
65-90 A-Z
97-122 a-z
'''
# numpy中也有random子模块
np.random
rand(3,3)给点形状产生随机数组(0到1之间的小数)
randint给点形状产生随机整数
choice给点形状产生随机选择
shuffle与random.shuffle相同
uniform给点形状产生随机数组(随机均匀分布)
normal随机正态分布

numpy案例

jason有10000元,去某赌场嗨皮
假设输赢概率都是50%,并且赢一场赚100,输一场亏100
jason总共玩了1500场
################# 初步实现
# 先定义一个变量存储jason的初始钱数
money = 10000
# for循环,定义玩的场数
for i in range(1500):
l = ['输','赢']
res = np.random.choice(l)
if res = '输':
money -= 100
else:
money += 100
print('1500场之后剩余的钱数:%s'%money)
###################进阶操作 每次都记录剩余的钱数
# 先定义一个变量存储jason的初始钱数
money = 10000
# 再定义一个空列表用来存储每一次剩余的钱数
l1 = []
l1.append(money)
# for循环,定义玩的场数
for i in range(1500):
l = ['输','赢']
res = np.random.choice(l)
if res == '输':
money -= 100
else:
money += 100
l1.append(money)
print('1500场之后剩余的钱数:%s'%money)
print(l1)
############## 后期操作 绘制剩余钱数的曲线图(暂时无需研究)
import matplotlib.pyplot as plt
plt.plot(range(1501),l1)
plt.show()
pandas模块

基于Numpy构建,强大的Python数据分析工具包
pandas的出现,让Python语言成为使用最广泛而且最强大的数据分析环境之一
pandas的主要功能:
1.具备诸多功能的两大数据结构:Series、DataFrame (都是基于Numpy构建出来的)
公司中使用频繁的是DataFrame,而Series是构成DataFrame的基础,
即一个DataFrame可能由N个Series构成
2.集成时间序列功能
3.提供丰富的数学运算和操作(基于Numpy)
4.灵活处理缺失数据
下载
pip3 install pandas
conda install pandas
导入
import pandas as pd # 习惯起pd别名
Series数据结构

主要包含两部分:
行标签/行索引
真实数据
创建方法:
1.pd.Series([4,5,6,7,8])
# np.array([11,22,33,44,55])
行索引数值
0 4
1 5
2 6
3 7
4 8
dtype: int64
2.
pd.Series([4,5,6,7,8],index=['a','b','c','d','e'])
# index参数指定行标签
行索引数值
a 4
b 5
c 6
d 7
e 8
dtype: int64
3.pd.Series({"a":1,"b":2})
# 字典的key会自动作为行标签 value自动作为数据
4.pd.Series(111,index=['a','b','c'])
缺失数据的概念

NaN: Not A Number 缺失数据
st = {"tony":18,"yang":19,"bella":20,"cloud":21}
obj = pd.Series(st)
obj
tony 18
yang 19
bella 20
cloud 21
dtype: int64
# 定义新索引
new_st = ['tony','yang','cloud','jason']
# 修改原索引
obj1 = pd.Series(st,index=new_st)
# 查看数据变化
obj1
tony 18.0
yang 19.0
cloud 21.0
jason NaN
dtype: float64
处理缺失数据的常用方法

dropna() # 过滤掉值为NaN的行
fillna() # 填充缺失数据
isnull() # 返回布尔数组
notnull() # 返回布尔数组
obj1.fillna(666) # 本身没有变化 只是产生了新的结果
obj1.dropna() # 本身没有变化 只是产生了新的结果
# 当一个操作方法执行之后返回了结果 说明没有改变原数据而是产生了新的数据
# 当一个操作方法执行之后没有任何返回结果 说明改变的是原数据本身
obj1.fillna(666,inplace=True)
'''如果想要直接改变原变量数据 则通过参数inplace=True'''
# 布尔选择器 #

mask = pd.Series([True,False,False,True,False])
price = pd.Series([321312,123,324,5654,645])
1.price[mask] # 布尔取值 按照位置对应 取出所有为True的
2.price|mask # | 相当于python逻辑运算符的or或
3.(price>200) & (price<900)
# 筛选出价格大于200并且小于900的数据
# & 相当于python逻辑运算符的and与
price[(price>200) & (price<900)]
'''
2 324
4 645
dtype: int64
'''
"""在使用&与的时候 连接的是条件并且多个条件都必须加括号"""
Series索引取值

3 3
4 4
5 5
6 6
7 7
8 8
9 9
dtype: int32
srr.iloc[0] # 以行索引获取值 3
srr.loc[3] # 以行标签获取值 3
srr.index # 获取Series行索引/行标签 在pandas中字符串类型统一使用object来声明
sr = pd.Series(np.arange(10))
sr
srr = sr[3:]
srr
srr[0] # 报错!!!
数据操作

sr3 = pd.Series([11,22,33,44,55,66])
# 改
sr3.iloc[0] = 77
sr3.loc[5] = 99
# 增
sr3.append(pd.Series({'a':1,'b':2}))
# 删
del sr3[1] # 不能使用iloc和loc
DataFrame结构(重要)
表格型数据结构(表)
相当于一个二维数组,含有一组有序的列也可以看作是由Series组成的共用一个索引的字典
多种创建方式:
1.pd.DataFrame({'one':[1,2,3,4],'two':[4,3,2,1]})
# 字典的键会作为表格的列字段名称
# 字典的值会作为表格的真实数据项
onetwo
014
123
232
341
2.pd.DataFrame({
'one':pd.Series([1,2,3],index=['a','b','c']),
'two':pd.Series([1,2,3],index=['b','a','c'])
})
# Series指定行标签 则展示行标签
3.pd.DataFrame(np.array([[10,20],[30,40]]),index=['a','b'],columns=['c1','c2'])
# index自定义行标签
# columns自定义列字段名称
4.pd.DataFrame([np.arange(1,8),np.arange(11,18)])
# 如果没有行标签和列字段名称 那么统一使用从0开始的索引值
5.s1 = pd.Series(np.arange(1,9,2))
s2 = pd.Series(np.arange(2,10,2))
s3 = pd.Series(np.arange(5,7),index=[1,2])
pd.DataFrame({'c1':s1,'c2':s2,'c3':s3})
基本运算符

add加add
sub 减substract
div除divide
mul 乘multiple
sr1 = pd.Series([12,23,34], index=['c','a','d'])
sr3 = pd.Series([11,20,10,14], index=['d','c','a','b'])
sr1.add(sr3)
# 按照行标签对应计算
sr1.add(sr2,fill_value=666) # 先填充缺失值 再计算
a 33.0
b 680.0
c 32.0
d 45.0
dtype: float64





