【joyful pandas 01】基础知识1

学习数据分析的预备知识

python基础知识

列表推导式与条件赋值

列表推导式是我觉得python最简便的地方了,通过列表推导式可以把很长的一段话缩减成很小的一部分,在之前的建模高教贝建模中,自己做的代码方法就显得很笨拙,很长一段时间想要好好学习一下推导式,现在就在datawhale的第20期pandas练习中+《利用python进行数据分析》,好好淦一下列表推导式:

看到有个新概念语法糖,于是查了一下资料:

语法糖就是在代码编辑中能够增强代码可读性的编码方式,这里的列表推导式当然属于其中,后面的条件赋值也是。

而列表推导式的特点就是允许过滤一个容器的元素,通过一种简明的表达式转换给过滤器,从而生成一个新的列表其形式如下:

[expr for val in collection if condition ]        # 列表推导式的形状
# 其等价于
result = []
for val in collection:
    if condition:
        result.append(expr)

条件赋值则是形如

value = x if confition else y
value
# 其等价的写法为
a,b=x,y
condition=condition_(bool) # 此处默认为True
if condition_:
    value = a 
else:
    value = b 

对上述两个语法糖举个栗子:

# 截断列表中的超过5的数字
L = range(10)
[i if i< =5 else 5 for i in L]

输出

[0, 1, 2, 3, 4, 5, 5, 5, 5, 5]

匿名函数(lambda)与map方法

匿名函数是指通过单个语句生成 函数的方法, 且该关键词仅表达“我们声明一个匿名函数”的意思。

匿名函数的特点就是清晰地表述一些映射关系,在少数几个地方使用,用户不关心函数的名字很少被重复使用。`

my_func = lambda x : 2*x
my_func(3)

输出的内容

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

输出结果为

[0, 2, 4, 6, 8]

形如上式中的,再列表推导式中使用匿名函数映射,而对于这种映射,python提供了map函数实现,且返回的是一个map对象,需要通过list获得输出值:

list(map(lambda x:2*x,range(5)))
[0, 2, 4, 6, 8]

map可以是实现多个输入值的映射,往里面追加迭代对象

list(map(lambda x,y:str(x)+'_'+y,range(5),list("abcde")))
['0_a', '1_b', '2_c', '3_d', '4_e']

zip 和 enumerate方法

L1,L2,L3 = list('abc'),list('def'),list('hij')
list(zip(L1,L2,L3))   # 通过zip打包三个对象

输出结果:

[('a', 'd', 'h'), ('b', 'e', 'i'), ('c', 'f', 'j')]

zip方法可以处理任意长度的序列,其胜场的列表长度由最短的序列决定

seq1 = ['foo','bar','baz']
seq2 = [False,True]
list(zip(seq1,seq2))
[('foo', False), ('bar', True)]

enumerate是python的内建函数,当我们需要在遍历一个序列的同时追踪索引的时候,可以两个内容都获取的方式,我自己在做的时候是经常需要这种操作的。它返回的(i,value)元组的序列,i是元素的索引,value是值:

for i,value in enumerate(collection):
    #其一般的使用方法

在对数据建立索引时,一种有效的方式是使用enumerate方法构造一个字典

some_list =['foo','bar','baz']
mapping={}
for i,v in enumerate(some_list):
    mapping[v]=i  # 对字典赋值	
mapping
{'foo': 0, 'bar': 1, 'baz': 2}

可以使用zip进行多个遍历,此时和enumerate一起用会更加酸爽

for i,(a,b) in enumerate(zip(seq1,seq2)):
    print('{0}:{1},{2}'.format(i,a,b))

输出

0:foo,False
1:bar,True

相对python提供的zip,也提供了*联合zip的解压方法

zipped = zip(L1,L2,L3)
list(zip(*zipped))

输出

[('a', 'b', 'c'), ('d', 'e', 'f'), ('h', 'i', 'j')]

前段时间自己自顾自的学习python,直接也跳过了基础内容就淦机器学习、学了pandas学sklearn。整个人学的一脸懵逼,这段时间通过datawhale的一个月的时间希望自己能把基础夯实,小白学东西实在是太难看了。

没有输出,就没有输入
刚刚看到导入的md文件有点问题,检查了一遍发现还好,最好别拉跨了。
希望一起学习一起交流

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值