Pandas&Numpy 数据处理笔记

Pandas&Numpy 数据处理笔记

参考: Pandas Cheatsheet和《joyful pandas》

基础知识

Python基础

常用语法糖(2个),匿名函数,map, zip, enumerate等

列表推导式

[<映射函数> for i in <迭代对象>]	
# 可以多层嵌套:
[m+'_'+n for m in ['a', 'b'] for n in ['c', 'd']] 

条件赋值

也是很有用的语法糖

value = a if condition else b

类似C++的value=condition? a:b;

匿名函数与map方法

  • 匿名函数
    清晰简单的映射关系可以用匿名函数定义:
lambda 变量:对变量的操作
my_func = lambda x: 2*x
  • map方法
    第一个参数为调用的函数,之后是自变量构成的可迭代对象(定义域),返回函数值构成的list(值域
map(function, iterable)
map(function, iterable1, iterable2...)  #也可以有多个可迭代对象
  • 匿名函数与map的联系
    用map可以很方便地得到匿名函数在一串数上的映射结果:
list(map(lambda x:2*x, listX))
# 等价于
list((lambda x:2*x)(i) for i in listX)

封装成可迭代对象 zip(), enumerate()

  • zip()
    封装成可迭代的zip对象, list(zip(object))的成员是object内部元素值
L1, L2, L3 = list('abc'), list('def'), list('hij')
zipped = zip(L1, L2, L3)  # 没有tuple()或list()打包前是个zip对象
# 得到[('a', 'd', 'h'), ('b', 'e', 'i'), ('c', 'f', 'j')]						
  • enumerate()
    封装成可迭代的enumerate对象,相对zip()区别是:
    • enumerate()还会返回每个元素的下标
    • enumerate()参数为一个可迭代对象+(可选)开始封装的下标

list(enumerate(object))的成员是object内部元素的下标和元素值构成的tuple(index, value)

L1=list('abc')
zipped = enumerate(L1)  # 没有tuple()或list()打包前是个enumerate对象
# 得到[(0, 'a'), (1, 'b'), (2, 'c')]						
  • 不转换成list,tuple等常用数据结构时
    zip()和enumerate()本身可用于for循环中作迭代的对象:

    • zip():
      在这里插入图片描述
    • enumerate() 用于同时需要处理迭代对象成员的下标时:
# 将下标和值 直接输出
for index, value in enumerate(L1):  
    print(index, value)

Numpy基础

numpy数组(np.array)构造与操作

特殊矩阵 全0/1/某个值 单位矩阵

传参数时传入维度数构成的tuple(除非只有一维度,可以不加括号)

# 传入每个维度数组成的tuple
np.zeros((2,3))		#2*3的全0矩阵
np.ones((2,3))		#2*3的全1矩阵
np.full((2,3),10)	#2*3的‘全10矩阵’ 第二个参数为全部赋成的值
np.eyes(3)		#3*3的单位矩阵(必然方阵)

随机矩阵 np.random

np.random类的构造函数有rand, randn, randint, choice,分别返回0-1 均匀分布的随机数组、标准正态分布、随机整数和随机列表抽样分布构成的np.array

np.random.rand(3) # 生成服从 0-1 均匀分布的三个随机数组成的np.array
np.random.rand(2,3) # 生成服从 0-1 均匀分布的2*3个随机数组成的np.array 注意这里不是tuple而是直接传入一个个维度数
(b-a)*np.random.rand(2,3)+a # (b,a)上的均匀分布

np.random.randn(2,3) # 标准正态分布
mu+sigma*np.random.randn(2,3) # (mu,sigma^2)的正态分布

np.random.randint(low, high, size) # low, high为这些随机整数的最小值和最大值,size为维度的tuple

np数组的操作

  • 转置 array.T
  • 合并操作 array.r_, array.c_
  • 维度变换reshape
  • 切片 start:end:steptuple(索引)
  • 布尔索引np.ix_
合并操作:

注意一维数组和多维数组合并时必须视一维数组为列向量,只能用列合并.c_(左右合并)

np.c_[np.zeros(2),np.zeros((2,1))] # 正确
np.r_[np.zeros(2),np.zeros((2,1))] # 报错,提示维度不对
维度变换:

array.T不写括号(直接对array本身操作,但不是所有的函数都这样,比如array.sum())
reshape()直接传入维度,而不是传入维度tuple

切片:

切片本质就是索引,所以写在整数索引的位置上,只不过返回的一般是子矩阵等(而不是一个标量)

  • 写法1: start:end:step 左闭右开,截取时不取end那一维度
  • 写法2:使用索引tuple,直接传入该维度上要截取的tuple(index)
    例如:
target=np.arange(9).reshape(3,3)	# [[1,2,3],[4,5,6],[7,8,9]]
targetSlice=target[:-1, (0,1)]      # 选取行:最后一行(不含)之前的行;选取列:0、1两列

输出结果为:[[0 1], [3 4]]

  • 切片前:
    在这里插入图片描述
  • 切片后:
    在这里插入图片描述

np数组相关的常用函数

  • np.where
    常用于给np.array(a)赋值,格式为np.where(条件,v1,v2),满足条件的赋为v1,否则赋为v2
    (类似SQL的IF(cond,v1,v2)
np.where(a>0, a, 5) # 给数组a赋值 对应位置为 True 时填充 a 对应元素,否则填充 5
  • array.nonzero, array.argmax, array.argmin
    返回相应元素的下标
    分别为非零元素下标(返回list),最大值下标,最小值下标
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Kaze-1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值