Pandas 与 Numpy 常用方法总结
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 常用方法总结的更多相关文章
- 数据分析之Pandas和Numpy学习笔记(持续更新)<1>
pandas and numpy notebook 最近工作交接,整理电脑资料时看到了之前的基于Jupyter学习数据分析相关模块学习笔记.想着拿出来分享一下,可是Jupyter导出来h ...
- Python Pandas与Numpy中axis参数的二义性
Stackoverflow.com是程序员的好去处,本公众号将以pandas为主题,开始一个系列,争取做到每周一篇,翻译并帮助pandas学习者一起理解一些有代表性的案例.今天的主题就是Pandas与 ...
- 用豆瓣加速安装pandas、numpy、matplotlib(画图)
安装pandas.numpy会同时被安装 #pthony2.x,用豆瓣加速安装pandas pip install -i https://pypi.doubanio.com/simple/ panda ...
- Pandas和Numpy的一些金融相关的操作(一)
Pandas和Numpy的一些金融相关的操作 给定一个净值序列,求出最大回撤 # arr是一个净值的np.ndarray i = np.argmax( (np.maximum.acumulate(ar ...
- 【强化学习】用pandas 与 numpy 分别实现 q-learning, saras, saras(lambda)算法
本文作者:hhh5460 本文地址:https://www.cnblogs.com/hhh5460/p/10159331.html 特别感谢:本文的三幅图皆来自莫凡的教程 https://morvan ...
- 利用pandas对numpy数组进行简单的科学计算
二维数组转换为DataFrame pandas可直接进行科学计算形式: import numpy as np import pandas as pd a = [1,2,3] b = [4,5,6] # ...
- 利用pandas将numpy数组导出生成excel
代码 # -*- coding: utf- -*- """ Created on Sun Jun :: @author: Bruce Lau ""&q ...
- ubuntu下python安装pandas和numpy等依赖库版本不兼容的问题RuntimeWarning: numpy.dtype size changed
习惯了linux下用pip install numpy及pip install pandas命令了.折腾了好久了. 上来先在python3中pip3 install numpy装了numpy,然后再p ...
- 利用pandas和numpy计算表中每一列的均值
import numpy as np import pandas as pd df = pd.DataFrame({'var1':np.random.rand(100), #生成100个0到1之间的随 ...
随机推荐
- 前端有用的CSS属性和JS方法
1.CSS属性: 透明属性(值越大越不透明): IE:filter:alpha(opacity:30) Google:opacity:0.3 层次属性(值大的会在上面): z-index:100 2. ...
- 好用的随查工具Dash
1. 好用的随查工具Dash 1.1. mac版本推荐 推荐一个很好用的工具,名字就叫Dash,当然缺点就是只有英文版,中文版可能也有但更新肯定不如英文及时 可以自由下载各种文档,比如下面的这图,左侧 ...
- Beego 学习笔记11:文件的上传下载
文件的上传和下载 1->文件的上传 文件的上传,采用的是uploadify.js这个插件. 本事例实现的是上传图片文件,其他的文件上传也一样. 2->文件的下载 文件的下载有两个实现的方式 ...
- 线下AWD平台搭建以及一些相关问题解决
线下AWD平台搭建以及一些相关问题解决 一.前言 文章首发于tools,因为发现了一些新问题但是没法改,所以在博客进行补充. 因为很多人可能没有机会参加线下的AWD比赛,导致缺乏这方面经验,比如我参加 ...
- git https解决免ssL和保存密码
1.打开windows的git bash set GIT_SSL_NO_VERIFY=true git clonegit config --global http.sslVerify false 2 ...
- redis-存储命令
一.String类型: 1.赋值/取值 set key valueget key 2.设置/获取多个键值 mset key1 value1 key2 value2 … mget key1 ke ...
- php 根据URL下载远程图片、压缩包、pdf等文件到本地
1.此方法可以下载图片.压缩包.pdf(亲测),应该所有类型的文件都可以下载到本地,可以试一下 //远程路径,名称,文件后缀 function downImgRar($url,$rename,$ext ...
- Selenium_webdriver+java通过读取firefox、chrome的cookie文件,实现自动登录
遇到过很多问题,通过查资料得出的最终结果!
- spark读写Oracle、hive的艰辛之路(一)
前两天工作需求,要通过给的几个Oracle的视图把数据入到hive库中,很遗憾,使用的华为云平台的集区环境中并没有sqoop1,当然也并没有sqoop2,所以,想到的解决方案是使用spark读取Ora ...
- iOS App开发那些事:如何选择合适的人、规范和框架?
http://www.cocoachina.com/ios/20141202/10386.html 自从做Team Leader之后,身上权责发生了变化,于是让我烦恼的不再是具体某个功能,某个界面的实 ...