Datawhale组队学习(Pandas) task1-预备知识

本文介绍了使用Python的Pandas库进行数据处理的基础知识,包括列表推导式、条件赋值、匿名函数等技巧,以及Numpy库的基础操作,如数组创建、变形、切片、数学运算等内容。

【1】第20期 学习者手册(Pandas)
【2】第一章 预备知识

1. Python 基础

1.1 列表推导式与条件赋值

问题1:生成 [0, 2, 4, 6, 8] 样式的数字序列

  • 写法1:定义函数+循环
def my_func(x):
    return x*2

list = []
for i in range(5):
    list.append(my_func(i))
    
print(list)
  • 写法2:定义函数+列表推导式
list = [my_func(i) for i in range(5)]
print(list)

列表推导式 [* for i in *],第一个 * 表示映射函数,其输入为后面 i 指代的内容,第二个 * 表示迭代的对象。

问题2:用多层嵌套列表推导式生成 ['a_c', 'a_d', 'b_c', 'b_d']

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

问题3:用带有 if 选择的条件赋值,即value = a if condition else b 实现截断列表中超过5的元素,即超过5的用5代替,小于5的保留原来的值

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

1.2 匿名函数与map方法

问题4:利用匿名函数生成 [0, 2, 4, 6, 8] 样式的数字序列

[(lambda x:x*2)(i) for i in range(5)]

问题5:利用匿名函数和map函数对匿名函数映射,生成 [0, 2, 4, 6, 8] 样式的数字序列

a = map(lambda x:x*2, range(5))

# 在python2中map()函数返回的是一个列表
# 但是在python3中返回的是一个迭代器(iteration)

for i in a:
    print(i)  # 0 2 4 6 8

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

问题6:利用匿名函数和map函数对匿名函数映射,生成[‘0_a’, ‘1_b’, ‘2_c’, ‘3_d’, ‘4_e’]

# list函数生成列表list('abcd') >>> ['a', 'b', 'c', 'd']
list(map(lambda x,y: str(x)+'_'+y, range(5), list('abcde')))

map() 根据提供的函数对指定序列做映射,语法:map(function, iterable, ...)

注:在做这道题时,总是报错’list’ object is not callable,后来才发现原来是做上面题时我命名了list变量,以后要注意 避免和函数名、方法名和关键词重复。不是第一次犯这种错误了 = =
【3】变量和函数同时使用了list,导致抛出异常

1.3 zip对象与enumerate方法

问题7:用zip打包多个可迭代对象

L1 = list('abcde')
L2 = range(4)

for a, b in zip(L1, L2):
    print(a, b)

# 元素个数与最短的列表一致
>>> 
a 0
b 1
c 2
d 3

问题8:用 enumerate 打包一个可迭代对象并绑定迭代元素的遍历序号

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

enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标。语法:enumerate(sequence, [start=0])sequence 表示一个序列、迭代器或其他支持迭代对象,[start=0] 表示下标起始位置。

问题9:用 zip 压缩 L1L2,并解压

zipped = list(zip(L1, L2))
zipped
>>> [('a', 0), ('b', 1), ('c', 2), ('d', 3)]

list(zip(*zipped))
>>> [('a', 'b', 'c', 'd'), (0, 1, 2, 3)]

问题10:用 zip 建立 L1L2 的字典映射

dict(zip(L1, L2))
>>> {
   
   'a': 0, 'b': 1, 'c': 2, 'd': 3}

2. Numpy基础

2.1 np数组的构造

问题11-1:用 array 构造 [1, 2, 3]

np.array([1,2,3])
>>> array([1, 2, 3])

问题11-2:利用 np.linspace, np.arange 构造等差序列

np.linspace(1,5,11) # [起始, 终止], 样本个数
>>> array([1, 2, 3])

np.arange(1,5,2) # [起始, 终止), 步长 
>>> array([1, 3])

问题11-3:构造偏移主对角线1个单位的伪单位矩阵

np.array([1,2,3])
>>> array([1, 2, 3])

问题11-4:利用 np.random 生成随机矩阵

# (1)生成服从0-1均匀分布的三个随机数
np.random.rand(3)
# (2)生成元素服从0-1均匀分布的3*3数组
np.random.rand(3,3)
# (3)生成服从a-b均匀分布的三个随机数
a, b = 5, 15
(b-a) * np.random.rand(3) + a
=======================
# (1)生成服从N(0,1)标准正态分布的三个随机数
np.random.randn(3)
# (2)生成服从方差σ^2, 均值μ一元正态分布的三个随机数
sigma, mu = 2.5, 3
mu + np.random.randn(3) * sigma
=======================
# (1)生成随机整数 [low, high)
low, high, size = 5, 15, (2,2)
np.random.randint(low, high, size)
>>> array([[11,  8],
       [14, 10]])
==================
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值