Pandas进阶壹 巩固基础

Pandas进阶壹 巩固基础

pandas进阶系列根据datawhale远昊大佬的joyful pandas教程写一些自己的心得和补充,本文部分引用了原教程,并参考了《利用Python进行数据分析》

一、Python列表操作进阶

1. 列表推导式

可以使用for循环推导列表,此处for可以是多层嵌套表达,原理和多层循环之后向列表中插入一个值相同,因此列表推导式for前面的表达式可以使用正常表达式的所有操作

d = {
   'a':1, 'b':2}
[i+'_'+str(d[i])+'_'+j+'_'+str(k) for i in d.keys() for j in ['p', 'q'] for k in [4, 5]]
['a_1_p_4',
 'a_1_p_5',
 'a_1_q_4',
 'a_1_q_5',
 'b_2_p_4',
 'b_2_p_5',
 'b_2_q_4',
 'b_2_q_5']

为列表推导式加入条件语句

# 可以用条件表达式语法糖简洁地写出两个列表两两对比的较大值
[i if i>j else j for i in ['a', 't', 'm'] for j in ['b', 'e', 'z']]
['b', 'e', 'z', 't', 't', 'z', 'm', 'm', 'z']

注意如果只写if,没有else的话条件语句应该放在for之后
如果有else的话应该放在for之前
否则是错误写法

[i for i in range(7) if i<5]
[0, 1, 2, 3, 4]
[i if i<5 else 8 for i in range(7)]
[0, 1, 2, 3, 4, 8, 8]

列表推导式同样可以用在字典、集合上,如下:

# 由两个列表生成字典
{
   i:j for i in ['a', 'b', 'c'] for j in [1, 2, 3]}
{'a': 3, 'b': 3, 'c': 3}
{
   i for i in [1,1,1,2,3,4,4]}
{1, 2, 3, 4}

列表推导式本身也可以嵌套

from collections import Counter
words = ['collections', 'error', 'employee']
[[ch for ch in word] for word in words]
[['c', 'o', 'l', 'l', 'e', 'c', 't', 'i', 'o', 'n', 's'],
 ['e', 'r', 'r', 'o', 'r'],
 ['e', 'm', 'p', 'l', 'o', 'y', 'e', 'e']]

2. 匿名函数与map方法

[(lambda x: 2*x)(i) for i in range(5)]
[0, 2, 4, 6, 8]

通过lambda函数可以自定义排序方式

employees = [
    ['Alan Turing', 25, 10000],
    ['Alan Turing', 30, 1000],
    ['John Hopkins', 18, 1000],
    ['Mikhail Tal', 40, 15000],
]
employees.sort(key=lambda x:[x[2], x[0], x[1]])
employees
[['Alan Turing', 30, 1000],
 ['John Hopkins', 18, 1000],
 ['Alan Turing', 25, 10000],
 ['Mikhail Tal', 40, 15000]]

3. zip对象

这里总结一些学习之后我想到的zip的用法

  1. 矩阵转置
m = [[1,2,3],[4,5,6],[7,8,9]]
list(zip(*m))
[(1, 4, 7), (2, 5, 8), (3, 6, 9)]
  1. 通过两个列表构造字典
dict(zip(['a', 'b', 'c'], [1, 2, 3]))
{'a': 1, 'b': 2, 'c': 3}

4. itertools模块

import itertools

names = ['alan', 'adam', 'wes', 'will']
nameid = [1, 3, 5]

利用groupby分组

for ch, words in itertools.groupby(names, lambda x: x[0]):
    print(ch, list(words))
a ['alan', 'adam']
w ['wes', 'will']

利用permutations求一个列表的所有排列

print(list(itertools.permutations(nameid, 3)))
print(list(itertools.permutations(nameid, 2)))
[(1, 3, 5), (1, 5, 3), (3, 1, 5), (3, 5, 1), (5, 1, 3), (5, 3, 1)]
[(1, 3), (1, 5), (3, 1), (3, 5), (5, 1), (5, 3)]

利用combinations求一个列表的所有组合

list(itertools.combinations(names, 2))
[('alan', 'adam'),
 ('alan', 'wes'),
 ('alan', 'will'),
 ('adam', 'wes'),
 ('adam', 'will'),
 ('wes', 'will')]

二、Numpy基础

远昊大佬写的很全面了,我在这里记录一些自己的理解和补充

先贴下原文中的函数帮助自己回顾

矩阵构造:

  1. np.array(list):构造numpy 数组
  2. np.linspace(起始, 终止, 样本个数)
  3. np.arange() 和range类似
  4. np.zeros(shape) 全0矩阵
  5. np.eye(n) n维单位矩阵
  6. np.full(shape, value) 构造值全为value

随机数:

  1. np.random.rand() 构造均匀分布的随机数组
  2. np.random.randn() 构造正态分布的随机数组
  3. np.random.choice() 在列表中随机选取,可以设置有无放回,也可以设置选取的概率

变形与合并:

  1. T 转置
  2. np.r_(array1, array2) 上下合并
  3. np.c_(array1, array2) 左右合并
  4. x.reshape(shape, order=‘C’/‘F’) 默认C代表按行重排,F代表按列重排
  5. x.reshape(-1) 将array展开

切片与索引:

  1. np.ix_() 指定索引的行列

常用函数:

  1. np.where 指定满足条件和不满足条件的填充值
  2. np.nonzero, np.argmin, np.argmax 返回非零值、最小最大值的索引
  3. np.cumprod, np.cumsum 累乘,累加
  4. 统计函数max, min, mean, median, std, var, sum, quantile
  5. cov协方差, corrcoef相关系数

线性代数:

  1. 向量内积 a.dot(b) a@b
  2. linalg包
import numpy as np

1. range 与 np.arange
arange和python range的区别是arange步长可以为小数,如:

try:
    range(1, 3.6, 0.2)
except Exception as e:
    print(e)
'float' object cannot be interpreted as an integer
np.arange(1,3.6,0.2)
array([1. , 1.2, 1.4, 1.6, 1.8, 2. , 2.2, 2.4, 2.6, 2.8, 3. , 3.2, 3.4])

2.np.full
np.full的原理是用了broadcast,可以传一行进行广播,也可以传一列进行广播

np.full((2,3), [[1],[2]]) # 按列广播
array([[1, 1, 1],
       [2, 2, 2]])
np.full((2,3
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值