暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

python模块分享

DATA ANALYSIS SHARING 2021-09-20
453

点击蓝字

关注我们


·基本运算符·


# 数组在运算的时候是按照位置一一对应计算,而列表相加则为拼接


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


文章转载自DATA ANALYSIS SHARING,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论