pandas基础
一.基础知识
1.Python基础
列表推导式与条件赋值
常规生成数字序列方法:
L=[]
def func(x):
return x*x
#range范围从0~n-1
for i in range(5):
L[i]=func(i)
使用列表推导式简化:
[func(i) for i in range(5)]
列表推导式的多层嵌套:
[i+'_'+j for i in ['a','b'] for j in ['d','c']]
注:range范围从0~n-1
条件赋值:实现大于5赋值为5
L = [1, 2, 3, 4, 5, 6, 7]
[i if i <= 5 else 5 for i in L]
匿名函数与map方法
func=lambda x:2*x
func(3)
x_add_y=lambda x,y:x+y
x_add_y(1,2)
简化:
[(lambda x:2*x)(i) for i in range(5)]
map映射:
通过list转化类型
list(map(lambda x:2*x,range(5)))
多个输出值的映射:
list(map(lambda x,y: str(x)+'_'+y,range(5),list('abcde')))
zip对象与enumerate方法
zip函数:将多个迭代对象逐个打包成元组构成新的可迭代对象
L1, L2, L3 = list('abc'), list('def'), list('hij')
list(zip(L1, L2, L3))
tuple(zip(L1, L2, L3))
list(zip('abc',[1,2,3]
补充:常用函数
help()返回帮助信息
dir()返回指定对象或模块的成员列表
divmod(x, y)返回包含整商和余数的元组
abs(x)返回数字的绝对值和复数的模
all() 所有的元素为true,或不为true都返回true
any()真返回true 假返回false
ascii()转换为ASCII码
chr()返回Unicode为x的字符
ord()返回x的Unicode编
bool()返回对应的布尔值true或者false
bytes()生成字节串或把指定对象转换为字节串表示
callable()测试对象是否可以被调用
compile()把代码编译成可被exec()或eval()函数执行的代码对象
complex()返回复数
bin()将整数转化为二进制串
eval()计算返回字符串中s中表达式的值
int()返回十进制
str()转化字符串
exec()执行
oct()整数变成八进制
hex()将x转换为十六进制
input([提示])返回字符串
round()四舍五入
exit()退出当前解释器
quit()退出当前解释器
float()把整数和字符串转浮点数返回
frozenset([x])创建不可变字典对象
globals()返回当前作用域的全局变量及其值的字典
hash()返回哈希值,不可哈希抛出异常(列表可变不可哈希,元组不可变,可哈希)
id()返回内存地址
len()返回对象包含的元素个数,列表元组集合字典字符串以及range对象
list([]),set([]),tuple([x]),dict([x]) 将对象转化为列表 集合 元组 字典 或生成空的
max() min()返回最大值最小值
next()获取下一个元素
open()指定mode模式打开文件name并返回文件对象
pow(x,y)返回x的y次方
range(start=,end,step=)
reversed()逆序返回
sorted(,reverse)排序 参数reverse决定顺序
sum()求和
type()返回类型
2.Numpy基础
数组的构造
np.array()创建一维矩阵,内容是同类型,不同类会被转成同类
import numpy as np
L1=[1,2,3,4,5]
np.array(L1)
二维矩阵
nd2=np.array([[1,2,3,4],[2,2,3,4],[3,2,3,4]])
#形状属性
print(nd2.shape)
#类型属性
print(nd2.dtype)
#维度属性
print(nd2.ndim)
#元素个数
print(nd2.size)
#字节属性
print(nd2.itemsize)
等差数列
linspace(start,end,num)
#start起始位置,end中止位置(包含),num个数
np.linspace(1,6,6)
np.arange(1,6,6) # 起始、终止(不包含)、步长
随机矩阵
#生成服从0-1均匀分布的三个随机数
np.random.rand(3)
#服从区间 a 到 b 上的均匀分布
(b - a) * np.random.rand(3) + a
np.random.uniform(5, 15, 3)
#N(0,I) 的标准正态分布
np.random.randn(3)
#一元正态分布
np.random.normal(3, 3, 3)
#指定生成随机整数
np.random.randint(2, 10, 4)
#随机种子
np.random.seed(0)
np.random.rand()
特殊矩阵
#repeat创建指定次数指定元素的一维矩阵
np.repeat(3,4)
#固定数值和形状
np.full((2,3), 10)
#每行填入相同列表
np.full((2,3), [1,2,3]) # 每行填入相同的列表
#创建指定值全为1的矩阵
np.ones((3,4))
#全为0的矩阵
np.zeros((3,4))
#创建对角线为1,其他值为0的方形矩阵
np.eye((5))
数组的操作
转置
np.zeros((2,3)).T
合并
二维数组而言, r_
和 c_
分别表示上下合并和左右合并
np.r_[np.zeros((2,3)),np.zeros((2,3))]
np.c_[np.zeros((2,3)),np.zeros((2,3))]
转换维度
np.arange(8).reshape((2,4),order='读取顺序,行(C)/列(F)')
切片与索引
索引从0-n,切片通过分割 start:stop:step
nd2=np.array([[1,2,3,4],[2,2,3,4],[3,2,3,4]])
nd2[0][2]
nd2[:2]
nd2[:-1]
#将多维矩阵变成一维矩阵
# nd3=nd2.flatten()
#切片和索引
nd3[:]
nd3[2:]
nd3[2:5]
nd3[2:5:2]
nd3[::-1]
#n维矩阵索引与切片
nd6=np.array([[[1,2,3],[1,1,2]],[[4,5,6],[2,2,3]],[[7,8,9], [3,3,4]],[[10,11,12],[4,4,5]]])
nd6[2][0][1]
nd6[:1,:1,::-1]
向量与矩阵的运算
内积
a.dot(b)
矩阵乘法
a = np.arange(4).reshape(-1,2)
b = np.arange(-4,0).reshape(-1,2)
a@b
常用函数
where
是一种条件函数,可以指定满足条件与不满足条件位置对应的填充值
a = np.array([-1,1,-1,0])
np.where(a>0, a, 5) # 对应位置为True时填充a对应元素,否则填充5
nonzero
返回非零数的索引
argmax, argmin
分别返回最大和最小数的索引
a = np.array([-2,-5,0,1,3,-1])
np.nonzero(a)
a.argmax()
a.argmin()
any指当序列至少 存在一个 True或非零元素时返回 True ,否则返回 False
all指当序列元素 全为 True或非零元素时返回 True ,否则返回 False
a = np.array([0,1])
a.any()
a.all()
cumprod, cumsum
分别表示累乘和累加函数,返回同长度的数组, diff
表示和前一个元素做差,由于第一个元素为缺失值,在默认参数情况下,返回长度是原数组减1
a = np.array([1,2,3])
a.cumprod()
a.cumsum()
np.diff(a)
常用的统计函数包括 max, min, mean, median, std, var, sum, quantile
,其中分位数计算是全局方法,因此不能通过 array.quantile
的方法调用:
target = np.arange(5)
target.max()
np.quantile(target, 0.5) # 0.5分位数
略过缺失值统计最大值
np.nanmax(list)
协方差,相关系数
np.cov(array, array)
np.corrcoef(array, array)
axis
参数,它能够进行某一个维度下的统计特征计算,当 axis=0
时结果为列的统计指标,当 axis=1
时结果为行的统计指标
target = np.arange(1,10).reshape(3,-1)
target.sum(0)
target.sum(1)
参考
#[1]: https://datawhalechina.github.io/joyful-pandas/build/html/