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之间的随 ...
随机推荐
- python学习之:序列类型 之列表,元组,range
列表 列表是可变序列,通常用于存放同类项目的集合(其中精确的相似程度将根据应用而变化). class list([iterable]) 可以用多种方式构建列表: 使用一对方括号来表示空列表: [ ] ...
- Kafka Streams开发入门(3)
背景 上一篇我们介绍了Kafka Streams中的消息过滤操作filter,今天我们展示一个对消息进行转换Key的操作,依然是结合一个具体的实例展开介绍.所谓转换Key是指对流处理中每条消息的Key ...
- 微信分享接口的java开发的一些小步骤
1.配置接口信息进行验证 代码如下: /** * 访问没认证的地址跳转 * * @param request * @return 登录页面 * @throws ...
- vue 子组件 $emit方法 调用父组件方法
$emit方法 父组件 <template> <div> <child @callFather="activeSon"></child&g ...
- Python:基础复习
一.数据类型 对象的三大特征:值.身份.类型: 1)数字 Number 整型.浮点型 只有 int 和 float 两种类型: type(2/2):float 类型:2/2 == 1.0: type( ...
- JavaFX 学生登陆表格
利用JavaFX实现一个学生登陆的界面,其中包括各种JavaFX组件的使用,利用焦点变动自动检测内容的合法性和监控文本输入以及页面的跳转,具体代码如下: /* * To change this lic ...
- Linux GCC下strstr的实现以及一个简单的Kmp算法的接口
今天做了一道题,要用判断一个字符串是否是另一个字符串的子串,于是查了一下strstr的实现. 代码如下: char *strstr(const char*s1,const char*s2) { con ...
- 摘:Selenium api学习
selenium: selenium2(WebDriver) API1.1 下载selenium2.0的包 官方download包地址:http://code.google.com/p/seleniu ...
- JavaScript数组常用操作方法
ES5操作数组的方法 1.concat() concat() 方法用于连接两个或多个数组.该方法不会改变现有的数组,仅会返回被连接数组的一个副本. var arr1 = [1,2,3]; var ar ...
- python爬虫中遇到的问题以及解决方法
(1)运行后报错:“TypeError: cannot use a string pattern on a bytes-like” 原因:content用decode(‘utf-8’)进行解码,由by ...