第二周的作业是熟悉Python基础,了解pandas数据结构,这些资料网上很全,所以本文打算总结一些"长得很像"的函数,关于概率分布将继续在下一篇文章描述。
1.1 map函数
Python函数式编程中的map()函数是将func作用于seq中的每一个元素,并用一个列表给出返回值,可传入多个seq。
#map(fun,seq[seq1,seq2])
list_a=list(map( lambda x: x%3, range(6)))
list_b= list(map( lambda x, y: x * y, [1, 2, 3], [4, 5, 6] ))
list_c=list(map( lambda x,y: ( x * y, x + y), [1, 2, 3], [4, 5, 6] ) )#将两个list转成元组
1.2 reduce函数
reduce函数即为化简,它是这样一个过程:每次迭代,将上一次的迭代结果(第一次时为init的元素,如没有init则为seq的第一个元素)与下一个元素一同执行一个二元的func函数。
#reduce( func, seq[, init] )
#使用reduce函数需要引入
from functools import reduce
n = 5
reduce_a=reduce(lambda x, y: x * y, range(1, n + 1))# 120 1*2*3*4*5
m = 2
n = 5
reduce_b= reduce( lambda x, y: x * y, range( 1, n + 1 ), m ) #240 2*1*2*3*4*5
1.3 filter函数
filter(fun,seq),返回fun为true的那些值
filter_a=list(filter(lambda x:x%2==0,range(10)))#返回偶数
1.4 apply函数
apply作用于DataFrame中的每一行/每一列
df1=pd.DataFrame(np.arange(20).reshape(5,4),columns=['A','B','C','D'])
df1.loc['apply_sum']=df1.apply(lambda x:x.sum(),axis=0)#纵向的
df1['total']=df1[['A','C']].apply(lambda x:x.sum(),axis=1)#横向的
1.5 applymap函数
applymap 作用于DataFrame每个元素
df2=df1.applymap(lambda x:x+1)#每个元素+1
=================================================================
2.1 sort函数
sort()是python list内置排序的方法,排序完改变原list的值
my_list = [3, 5, 1, 4, 2]
my_list.sort()
my_list #输出[1, 2, 3, 4, 5]
2.2 sorted函数
排序不改变原有变量的数据结构,sorted(iterable[, cmp[, key[, reverse]]]),sorted()非常灵活,可以按照多种方式排序。
#sorted(iterable[, cmp[, key[, reverse]]])
my_list = [3, 5, 1, 4, 2]
print(sorted(my_list),my_list)# 返回[1, 2, 3, 4, 5] ,[3, 5, 1, 4, 2]
#1)可以用自定义的key可以来排序,用len函数作为key来排序
c =['CCC', 'bb', 'ffff', 'z']
sorted(c,key=len) #返回['z', 'bb', 'CCC', 'ffff']
#2)可以自定义函数,作为排序
def lastchar(s):
return s[-1]
e = ['abc','b','AAz','ef']
sorted(e,key = lastchar) #返回['b', 'abc', 'ef', 'AAz']
#一种写法
f = [{'name':'abc','age':20},{'name':'def','age':30},{'name':'ghi','age':25}] #列表中的元素为字典
def age(s):
return s['age']
ff = sorted(f,key = age) #自定义函数按列表f中字典的age从小到大排序 返回[{'age': 20, 'name': 'abc'}, {'age': 25, 'name': 'ghi'}, {'age': 30, 'name': 'def'}]
#另一种写法
f2 = sorted(f,key = lambda x:x['age']) #lambda函数可以达到预期效果
2.3 argsort函数
argsort() 是numpy中的函数,按照升序,返回索引的值
x = np.array([3, 1, 2])
np.argsort(x) #返回 array([1, 2, 0], dtype=int64)#升序排列 返回索引
np.argsort(-x) #降序 array([0, 2, 1], dtype=int64)
#另一种方式对array实现排序
x[np.argsort(x)] #升序
x[np.argsort(-x)]# 降序
x[::-1] #取从后向前(相反)的元素 个人感觉相当于list中的reverse()