pandas预备知识

一.Python基础

1. 列表推导式与条件赋值

def my_func(x):
    return 2*x
[my_func(i) for i in range(5)]

列表表达式还支持多层嵌套,如下面的例子中第一个for为外层循环,第二个为内层循环:

[m+'_'+n for m in ['a', 'b'] for n in ['c', 'd']]

在这里插入图片描述
除了列表推导式,另一个实用的语法糖是带有if选择的条件赋值,其形式为value = a if condition else b:

L = [1, 2, 3, 4, 5, 6, 7]
[i if i <= 5 else 5 for i in L]

在这里插入图片描述

2. 匿名函数与map方法

列表推导式的匿名函数映射,Python中提供了map函数来完成,它返回的是一个map对象,需要通过list转为列表:

list(map(lambda x: 2*x, range(5)))

在这里插入图片描述
对于多个输入值的函数映射,可以通过追加迭代对象实现:

list(map(lambda x, y: str(x)+'_'+y, range(5), list('abcde')))

在这里插入图片描述

3. zip对象与enumerate方法

zip函数能够把多个可迭代对象打包成一个元组构成的可迭代对象,它返回了一个zip对象,通过tuple, list可以得到相应的打包结果:

L1, L2, L3 = list('abc'), list('def'), list('hij')
list(zip(L1, L2, L3))

在这里插入图片描述

for i, j, k in zip(L1, L2, L3):
     print(i, j, k)

在这里插入图片描述
enumerate是一种特殊的打包,它可以在迭代时绑定迭代元素的遍历序号:

L = list('abcd')
for index, value in enumerate(L):
     print(index, value)

在这里插入图片描述

二、Numpy基础

1. np数组的构造¶

最一般的方法是通过array来构造:

import numpy as np
np.array([1,2,3])

在这里插入图片描述

【a】等差序列:np.linspace, np.arange

np.linspace(1,5,11) # 起始、终止(包含)、样本个数

在这里插入图片描述

np.arange(1,5,2) # 起始、终止(不包含)、步长

在这里插入图片描述

【b】特殊矩阵:zeros, eye, full

np.zeros((2,3)) # 传入元组表示各维度大小

在这里插入图片描述

np.eye(3) # 3*3的单位矩阵

在这里插入图片描述

np.full((2,3), 10) # 元组传入大小,10表示填充数值

在这里插入图片描述

【c】随机矩阵:np.random

最常用的随机生成函数为rand, randn, randint, choice,它们分别表示0-1均匀分布的随机数组、标准正态的随机数组、随机整数组和随机列表抽样:

np.random.rand(3, 3) # 注意这里传入的不是元组,每个维度大小分开输入

在这里插入图片描述
randint可以指定生成随机整数的最小值最大值(不包含)和维度大小:

low, high, size = 5, 15, (2,2) # 生成514的随机整数
np.random.randint(low, high, size)

在这里插入图片描述
choice可以从给定的列表中,以一定概率和方式抽取结果,当不指定概率时为均匀采样,默认抽取方式为有放回抽样:

my_list = ['a', 'b', 'c', 'd']
np.random.choice(my_list, 2, replace=False, p=[0.1, 0.7, 0.1 ,0.1])

在这里插入图片描述
最后,需要提到的是随机种子,它能够固定随机数的输出结果:
在这里插入图片描述

2. np数组的变形与合并

【a】转置:T

np.zeros((2,3)).T

在这里插入图片描述

【b】合并操作:r_, c_

对于二维数组而言,r_和c_分别表示上下合并和左右合并:

np.r_[np.zeros((2,3)),np.zeros((2,3))]

在这里插入图片描述

np.c_[np.zeros((2,3)),np.zeros((2,3))]

在这里插入图片描述

【c】维度变换:reshape

target = np.arange(8).reshape(2,4)
target

在这里插入图片描述

3. np数组的切片与索引

数组的切片模式支持使用slice类型的start🔚step切片,还可以直接传入列表指定某个维度的索引进行切片:

target = np.arange(9).reshape(3,3)
target

在这里插入图片描述

target[:-1, [0,2]]
取前面的行(不包括最后一行),取第0列和第2列

在这里插入图片描述

4. 常用函数

【a】where

where是一种条件函数,可以指定满足条件与不满足条件位置对应的填充值:

a = np.array([-1,1,-1,0])
np.where(a>0, a, 5) # 对应位置为True时填充a对应元素,否则填充5

在这里插入图片描述

【b】nonzero, argmax, argmin

这三个函数返回的都是索引,nonzero返回非零数的索引,argmax, argmin分别返回最大和最小数的索引:

a = np.array([-2,-5,0,1,3,-1])
np.nonzero(a)

在这里插入图片描述

a.argmax()     # 4
a.argmin()     # 1

【c】any, all

any指当序列至少 存在一个 True或非零元素时返回True,否则返回False

all指当序列元素 全为 True或非零元素时返回True,否则返回False

a = np.array([0,1])
a.any()   # True
 a.all()   # False

【d】cumprod, cumsum, diff

cumprod, cumsum分别表示累乘和累加函数,返回同长度的数组,diff表示和前一个元素做差,由于第一个元素为缺失值,因此在默认参数情况下,返回长度是原数组减1

a = np.array([1,2,3])
a.cumprod()

在这里插入图片描述

a.cumsum()

在这里插入图片描述

np.diff(a)

在这里插入图片描述

【e】 统计函数

常用的统计函数包括max, min, mean, median, std, var, sum, quantile,其中分位数计算是全局方法,因此不能通过array.quantile的方法调用

5. 广播机制

【a】标量和数组的操作

当一个标量和数组进行运算时,标量会自动把大小扩充为数组大小,之后进行逐元素操作:

res = 3 * np.ones((2,2)) + 1
res

在这里插入图片描述

【b】二维数组之间的操作

res = np.ones((3,2))
res

在这里插入图片描述

res * np.array([[2,3]]) # 扩充第一维度为3

在这里插入图片描述

6. 向量与矩阵的计算

【a】向量内积:dot

a = np.array([1,2,3])
b = np.array([1,3,5])
a.dot(b)

【b】矩阵乘法:@

a = np.arange(4).reshape(-1,2)
a

在这里插入图片描述

b = np.arange(-4,0).reshape(-1,2)
b

在这里插入图片描述

a@b

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值