Lambda 函数实现

简单的说,lambda 就是一个函数,但是这个函数没有名字,所以我们介绍一下这个函数的调用形式,参数与返回值的实现。 lambda 的格式如下:

lambda [arg1 [, agr2,.....argn]] : expression
lambda x : expression

那么这个函数怎么使用了,它常常不是单独使用,单独的使用的时候可以较为简单,实现的功能过于简单。所以通常被使用的情况是,某个函数的参数是一个函数,那么这个参数就可以使用 lambda来实现。

>>> foo = [2, 18, 9, 22, 17, 24, 8, 12, 27]
>>> list(map(lambda x: x * 2 + 10, foo))
# 这里的 map 函数的第一个参数就是函数

Pandas的Apply函数

apply 函数如下 DataFrame.apply(func, axis=0, broadcast=False, raw=False, reduce=None, args=(), **kwds) 。其核心部分是function 的选择,其次是 axis 表示维度,这个函数可以通过上面说的 lambda函数实现。这个函数的参数就是 DataFrame, 返回的对象既可以是 DataFrame 也可以是 series。

>>> import pandas as pd
>>> import numpy as np
>>> df = pd.DataFrame([[4, 9],] * 3, columns=['A', 'B'])
>>> df.apply(np.sqrt)
A B
0 2.0 3.0
1 2.0 3.0
2 2.0 3.0
# 返回的是一个 DataFrame >>> df.apply(np.sum, axis=0)
A 12
B 27
dtype: int64 # 返回的是一个 Series
>>> df.apply(lambda x: x*2 + 1, axis = 1) # 这种情况下,x 表示的是 df 中所有的参数
A B
0 9 19
1 9 19
2 9 19
>>> df.apply(lambda x: [1, 2,5], axis=1)
0 [1, 2, 5]
1 [1, 2, 5]
2 [1, 2, 5]
>>> df.apply(lambda x: [1, 2,5], axis=0)
A B
0 1 1
1 2 2
2 5 5
>>> df.apply(lambda x: [1, 2,6,7,8,5], axis=0)
A [1, 2, 6, 7, 8, 5]
B [1, 2, 6, 7, 8, 5]
>>> type(df.apply(lambda x: [1, 2,6,7,8,5], axis=0))
<class 'pandas.core.series.Series'>
# 这时,将DataFrame变成一个 Series。

python Zip函数

zip 函数的使用就是 zip([iterable, …]) 。zip()是Python的一个内建函数,它接受一系列可迭代的对象作为参数,将对象中对应的元素打包成一个个tuple(元组),然后返回由这些tuples组成的list(列表)。

>>> name = [ "Manjeet", "Nikhil", "Shambhavi", "Astha" ]
>>> roll_no = [ 4, 1, 3, 2 ]
>>> marks = [ 40, 50, 60, 70 ]
>>> mapped = zip(name, roll_no, marks)
>>> list(mapped)
[('Manjeet', 4, 40), ('Nikhil', 1, 50), ('Shambhavi', 3, 60), ('Astha', 2, 70)]

Pandas 中的 Map函数

Map 函数主要是对 DataFrame 的操作,其参数还可以是函数,

>>> import pandas as pd
>>> from pandas import Series, DataFrame
>>> data = DataFrame({'food':['bacon','pulled pork','bacon','Pastrami',
'corned beef','Bacon','pastrami','honey ham','nova lox'],
'ounces':[4,3,12,6,7.5,8,3,5,6]})
>>> data
food ounces
0 bacon 4.0
1 pulled pork 3.0
2 bacon 12.0
3 Pastrami 6.0
4 corned beef 7.5
5 Bacon 8.0
6 pastrami 3.0
7 honey ham 5.0
8 nova lox 6.0
>>> meat_to_animal = {
'bacon':'pig',
'pulled pork':'pig',
'pastrami':'cow',
'corned beef':'cow',
'honey ham':'pig',
'nova lox':'salmon' } >>> meat_to_animal
{'bacon': 'pig', 'pulled pork': 'pig', 'pastrami': 'cow', 'corned beef': 'cow', 'honey ham': 'pig', 'nova lox': 'salmon'}
>>> data['food'].map(str.lower)
0 bacon
1 pulled pork
2 bacon
3 pastrami
4 corned beef
5 bacon
6 pastrami
7 honey ham
8 nova lox
Name: food, dtype: object
>>> data['animal'] = data['food'].map(str.lower).map(meat_to_animal)
>>> data
food ounces animal
0 bacon 4.0 pig
1 pulled pork 3.0 pig
2 bacon 12.0 pig
3 Pastrami 6.0 cow
4 corned beef 7.5 cow
5 Bacon 8.0 pig
6 pastrami 3.0 cow
7 honey ham 5.0 pig
8 nova lox 6.0 salmon
>>> data['ounces'] = data['ounces'].map(lambda x: x+ 2) # 这里使用 Map 函数与Apply函数有点类似
>>> data
food ounces animal
0 bacon 6.0 pig
1 pulled pork 5.0 pig
2 bacon 14.0 pig
3 Pastrami 8.0 cow
4 corned beef 9.5 cow
5 Bacon 10.0 pig
6 pastrami 5.0 cow
7 honey ham 7.0 pig
8 nova lox 8.0 salmon

Numpy 中stack(),hstack(),vstack()函数

stack() 函数

函数原型为:stack(arrays, axis=0),arrays可以传数组和列表。axis的含义我下面会讲解,我们先来看个例子。

>>> import numpy as np
>>> a=[[[1,2,3,4],[11,21,31,41]],
[[5,6,7,8],[51,61,71,81]],
[[9,10,11,12],[91,101,111,121]]]
>>> a
[[[1, 2, 3, 4], [11, 21, 31, 41]], [[5, 6, 7, 8], [51, 61, 71, 81]], [[9, 10, 11, 12], [91, 101, 111, 121]]]
# 可以看成 a 有三层,我们把从外到里分别看成 axis = 0, axis = 1, axis = 2的三层,首先要确定这个 list a,有三个元素,每个元素都# 是一个 list_1,每个 lsit_1 有两个 list_2 元素,
>>> np.stack(a, axis = 0)
array([[[ 1, 2, 3, 4],
[ 11, 21, 31, 41]], [[ 5, 6, 7, 8],
[ 51, 61, 71, 81]], [[ 9, 10, 11, 12],
[ 91, 101, 111, 121]]])
>>> d = np.stack(a, axis = 0)
>>> len(d)
3
>>> d.shape # 在shape中分别表示从外到里的维度
(3, 2, 4)
# 得到的是一个 array 的类型,堆叠的是 axis = 0的那一层,相当于没变,只是数据格式改变
>>> np.stack(a, axis = 1)
array([[[ 1, 2, 3, 4],
[ 5, 6, 7, 8],
[ 9, 10, 11, 12]], [[ 11, 21, 31, 41],
[ 51, 61, 71, 81],
[ 91, 101, 111, 121]]])
>>> c = np.stack(a, axis = 1)
>>> c.shape
(2, 3, 4)
# 这里获取 array 的每个元素的方式
>>> np.stack(a, axis = 2)
array([[[ 1, 5, 9],
[ 2, 6, 10],
[ 3, 7, 11],
[ 4, 8, 12]], [[ 11, 51, 91],
[ 21, 61, 101],
[ 31, 71, 111],
[ 41, 81, 121]]])
>>> b = np.stack(a, axis = 2)
>>> b.shape
(2, 4, 3)

我们可以这样理解,stack 过程中堆叠了那一层的元素,将这些元素作为新的 Array 的最里层,axis != 0 的时候永远都是将第一层的元素堆叠成新的最里层元素。

hstack() 函数

对于上面的例子,我们做个转换就很好理解 hstack() 函数了

>>> d = np.stack(a, axis = -1)
>>> d
array([[[ 1, 5, 9],
[ 2, 6, 10],
[ 3, 7, 11],
[ 4, 8, 12]], [[ 11, 51, 91],
[ 21, 61, 101],
[ 31, 71, 111],
[ 41, 81, 121]]])
>>> d = np.hstack(d)
>>> d
array([[ 1, 5, 9, 11, 51, 91],
[ 2, 6, 10, 21, 61, 101],
[ 3, 7, 11, 31, 71, 111],
[ 4, 8, 12, 41, 81, 121]])
>>> d = np.hstack(d)
>>> d
array([ 1, 5, 9, 11, 51, 91, 2, 6, 10, 21, 61, 101, 3,
7, 11, 31, 71, 111, 4, 8, 12, 41, 81, 121])
>>> a = [[[[1, 2, 3, 4], [11, 21, 31, 41]], [[5, 6, 7, 8], [51, 61, 71, 81]], [[9, 10, 11, 12], [91, 101, 111, 121]]]]
>>> a
[[[[1, 2, 3, 4], [11, 21, 31, 41]], [[5, 6, 7, 8], [51, 61, 71, 81]], [[9, 10, 11, 12], [91, 101, 111, 121]]]]
hstack() 还可以用于两个array 的横向合并
>>> a=[[1],[2],[3]]
>>> b=[[1],[2],[3]]
>>> np.hstack((a,b))
array([[1, 1],
[2, 2],
[3, 3]])
vstack() 函数用于列的合并,也就是纵向
>>> np.vstack((a,b))
array([[1],
[2],
[3],
[1],
[2],
[3]])

Pandas分组运算(groupby)函数

groupby 函数就如字面上的意思,就是分组的意思,常用的方法第一个是分组, mean() 方法, 而groupby 的方法也常常用在观察数据类型中,在实际中分组也会使用

import pandas as pd
>>> df = pd.DataFrame({'A': ['a', 'b', 'a', 'c', 'a', 'c', 'b', 'c'], 'B': [2, 8, 1, 4, 3, 2, 5, 9],'C': [102, 98, 107, 104, 115, 87, 92, 123]})
>>> df
A B C
0 a 2 102
1 b 8 98
2 a 1 107
3 c 4 104
4 a 3 115
5 c 2 87
6 b 5 92
7 c 9 123
>>> df.groupby('A').mean()
B C
A
a 2.0 108.000000
b 6.5 95.000000
c 5.0 104.666667
>>> df.groupby(['A','B']).mean()
C
A B
a 1 107
2 102
3 115
b 5 92
8 98
c 2 87
4 104
9 123

聚合方法size()和count()

size跟count的区别: size计数时包含 NaN 值,而count不包含 NaN 值, 我们可以理解 groupby函数是用来分组,那么分组之后的函数是可以选择的,可以是 mean() ,查看,或者是 count() 计数,下面这个例子:

>>> df = pd.DataFrame({"Name":["Alice", "Bob", "Mallory", "Mallory", "Bob" , "Mallory"],"City":["Seattle", "Seattle", "Portland", "Seattle", "Seattle", "Portland"],"Val":[4,3,3,np.nan,np.nan,4]})
>>> df
City Name Val
0 Seattle Alice 4.0
1 Seattle Bob 3.0
2 Portland Mallory 3.0
3 Seattle Mallory NaN
4 Seattle Bob NaN
5 Portland Mallory 4.0
>>> df.groupby(["Name", "City"], as_index=False)['Val'].count()
Name City Val
0 Alice Seattle 1
1 Bob Seattle 1
2 Mallory Portland 2
3 Mallory Seattle 0
>>> df.groupby(["Name"], as_index=False)['City'].count()
Name City
0 Alice 1
1 Bob 2
2 Mallory 3
# 选择的那一组表示次数, 比如上面的 City,而Size 函数就是包含 NaN 的个数

Pandas 与 Numpy 常用方法总结的更多相关文章

  1. 数据分析之Pandas和Numpy学习笔记(持续更新)<1>

    pandas and numpy notebook        最近工作交接,整理电脑资料时看到了之前的基于Jupyter学习数据分析相关模块学习笔记.想着拿出来分享一下,可是Jupyter导出来h ...

  2. Python Pandas与Numpy中axis参数的二义性

    Stackoverflow.com是程序员的好去处,本公众号将以pandas为主题,开始一个系列,争取做到每周一篇,翻译并帮助pandas学习者一起理解一些有代表性的案例.今天的主题就是Pandas与 ...

  3. 用豆瓣加速安装pandas、numpy、matplotlib(画图)

    安装pandas.numpy会同时被安装 #pthony2.x,用豆瓣加速安装pandas pip install -i https://pypi.doubanio.com/simple/ panda ...

  4. Pandas和Numpy的一些金融相关的操作(一)

    Pandas和Numpy的一些金融相关的操作 给定一个净值序列,求出最大回撤 # arr是一个净值的np.ndarray i = np.argmax( (np.maximum.acumulate(ar ...

  5. 【强化学习】用pandas 与 numpy 分别实现 q-learning, saras, saras(lambda)算法

    本文作者:hhh5460 本文地址:https://www.cnblogs.com/hhh5460/p/10159331.html 特别感谢:本文的三幅图皆来自莫凡的教程 https://morvan ...

  6. 利用pandas对numpy数组进行简单的科学计算

    二维数组转换为DataFrame pandas可直接进行科学计算形式: import numpy as np import pandas as pd a = [1,2,3] b = [4,5,6] # ...

  7. 利用pandas将numpy数组导出生成excel

    代码 # -*- coding: utf- -*- """ Created on Sun Jun :: @author: Bruce Lau ""&q ...

  8. ubuntu下python安装pandas和numpy等依赖库版本不兼容的问题RuntimeWarning: numpy.dtype size changed

    习惯了linux下用pip install numpy及pip install pandas命令了.折腾了好久了. 上来先在python3中pip3 install numpy装了numpy,然后再p ...

  9. 利用pandas和numpy计算表中每一列的均值

    import numpy as np import pandas as pd df = pd.DataFrame({'var1':np.random.rand(100), #生成100个0到1之间的随 ...

随机推荐

  1. vue-cli 3.x版本执行vue ui命令后提示Error: Cannot find module ‘core-js/modules/es7.object.entries’报错的解决方法

    我的方法是:npm install --save core-js(全局安装竟然不行,必须局部) vue-cli新版提供了界面化项目管理的功能,简直一万个赞! 在安装 vue-cli 3.x  版本后, ...

  2. js数组与字符串类型相同方法的比较

    数组和字符串有很多相似的对方,比如数组和字符串都有以下方法: concat indexOf lastIndexOf slice includes 鉴于toString及valueOf方法基本类型都有, ...

  3. Beego 学习笔记一:环境的配置

    Beego 环境的配置 1>     下载go,并安装.下载地址是: https://golang.org/dl/.最好选择这部分的最新的下载安装 2>     配置环境变量(若是没有配置 ...

  4. 基于JPA的分页/排序实现

    Page<ClassOrder> findByMember_MemberID(long id, Pageable pageable); Controller代码: public Model ...

  5. 解决Ubuntu18.10 网络图标经常消失连不上网问题

    我不知道是什么原因,Ubuntu虚拟机经常会出现无法上网的问题? 此时右上角没有网络标志,Settings->NetWork也只有VPN一项,不知道咋用. 在网上终于找到了方法,亲测有效:htt ...

  6. 实验3-1 求一元二次方程的根 (20 分) 《C语言程序设计实验与习题指导(第3版)》

    本题目要求一元二次方程的根,结果保留2位小数. 输入格式: 输入在一行中给出3个浮点系数a.b.c,中间用空格分开. 输出格式: 根据系数情况,输出不同结果: 1)如果方程有两个不相等的实数根,则每行 ...

  7. 201671010417 金振兴 实验十四 团队项目评审&课程学习总结

    项目 内容 软件工程 https://www.cnblogs.com/nwnu-daizh/ 作业要求 https://www.cnblogs.com/sunmiaokun/p/11095027.ht ...

  8. 线程的等待与唤醒,实现if...else里面的值交互依次输出

    线程通信原理图: 资源类: package com.yonyou.sci.gateway.exec.threadnet; public class Resource { String name; St ...

  9. Nginx——跨域造成的504问题

    前言 前台域名和后台域名是两个不同不同的二级域名,访问的时候造成了跨域,出现了504错误 解决 修改Nginx配置,将超时的时间设置为1200秒 keepalive_timeout 1200; pro ...

  10. http协议 | http缓存

    缓存控制 1.禁止进行缓存:缓存中不得存储任何关于客户端请求和服务端响应的内容.每次由客户端发起的请求都会下载完整的响应内容. Cache-Control: no-store Cache-Contro ...