【学习】数据处理基础知识(基本功能、汇总计算描述统计、层次化索引)【pandas】

本章介绍pandas的重要功能,只记录一些重点内容

1、重新索引

pandas对象的一个重要方法是reindex,其作用是创建一个适应用新索引的新对象

#重新索引
obj = pd.Series([4.5, 7.2, -5.3, 3.6], index = [‘d‘, ‘b‘, ‘a‘, ‘c‘])
obj
#调用该Series的reindex将会根据新索引进行重排。如果某个索引值当前不存在,就引入缺失值
obj2 = obj.reindex([‘a‘, ‘b‘, ‘c‘, ‘d‘, ‘e‘])
obj2
obj.reindex([‘a‘, ‘b‘, ‘c‘, ‘d‘, ‘e‘], fill_value = 0)
#对于时间序列这样的有序数据,重新索引时可能需要做一些插值处理。method选项即可达到些目标
#使用ffill实现前向值填充
obj3 = pd.Series([‘blue‘, ‘purple‘, ‘yellow‘], index = [0, 2, 4])
obj3.reindex(range(6), method = ‘ffill‘)

#reindex的(插值)method选项
#ffill 或 pad  前向填充值; bfill 或 backfill  后向填充值
obj2.ix[[‘a‘]]

输出结果

obj = pd.Series([4.5, 7.2, -5.3, 3.6], index = [‘d‘, ‘b‘, ‘a‘, ‘c‘])

obj
Out[15]:
d    4.5
b    7.2
a   -5.3
c    3.6
dtype: float64
obj2 = obj.reindex([‘a‘, ‘b‘, ‘c‘, ‘d‘, ‘e‘])

obj2
Out[17]:
a   -5.3
b    7.2
c    3.6
d    4.5
e    NaN
dtype: float64

obj.reindex([‘a‘, ‘b‘, ‘c‘, ‘d‘, ‘e‘], fill_value = 0)
Out[18]:
a   -5.3
b    7.2
c    3.6
d    4.5
e    0.0
dtype: float64

obj3 = pd.Series([‘blue‘, ‘purple‘, ‘yellow‘], index = [0, 2, 4])

obj3.reindex(range(6), method = ‘ffill‘)
Out[20]:
0      blue
1      blue
2    purple
3    purple
4    yellow
5    yellow
dtype: object

obj2.ix[[‘a‘]]
Out[21]:
a   -5.3
dtype: float64

reindex函数的参数

2、丢弃指定轴上的项

丢弃某条轴上的一个或多个项很简单,只要有一个索引数组或列表即可。

drop方法返回的是一个在指定轴上删除了指定值的新对象

#定义一个数组,索引为 [‘a‘, ‘b‘, ‘c‘, ‘d‘, ‘e‘]
obj = pd.Series(np.arange(5.), index = [‘a‘, ‘b‘, ‘c‘, ‘d‘, ‘e‘])
obj
new_obj = obj.drop(‘c‘)
new_obj
obj.drop([‘d‘, ‘c‘])
#对DataFrame, 可以删除任意轴上的索引值

3、索引、选取和过滤

为了在DataFrame的行上进行标签索引,引入专门的索引字段ix,可以通过NumPy式的标记法以及轴标签从DataFrame中选取行和列的子集。

#为了在DataFrame的行上进行标签索引,引入专门的索引字段ix,可以通过NumPy式的标记法以及轴标签从DataFrame中选取行和列的子集。data = pd.DataFrame(np.arange(16).reshape((4, 4)), \                    index = [‘Ohio‘, ‘Colorado‘, ‘Utah‘, ‘New York‘], \                    columns = [‘one‘, ‘two‘, ‘three‘, ‘four‘])data

data.ix[‘Colorado‘, [‘two‘, ‘three‘]]data.ix[[‘Colorado‘, ‘Utah‘], [3, 0, 1]]#3,0,1代表列标识data.ix[2]#第2行data.ix[:‘Utah‘, ‘two‘]data.ix[data.three>5, :3]

注意:在设计pandas时, 我觉得必须输入frame[:, col]才能选取列实在有些啰嗦,而且还很容易出错,因为列的选取是一种最常见的操作

于是,我就把所有的标签索引功能都放在ix中了

DataFrame的索引选项

4、算术运算和数据对齐

pd最重要的一个功能是,它可以对不同索引的对象进行算术运算。在将对象相加时,如果存在不同的索引对,则结果的索引就是该索引对的并集

#算术运算和数据对齐
s1 = pd.Series([7.3, -2.5, 3.4, 1.5], index = [‘a‘, ‘c‘, ‘d‘, ‘e‘])
s2 = pd.Series([-2.1, 3.6, -1.5, 4, 3.1], index = [‘a‘, ‘c‘, ‘e‘, ‘f‘, ‘g‘])
s1, s2
s1 + s2
#list(‘bcd‘),相当于列元素,b, c, d
df1 = pd.DataFrame(np.arange(9).reshape((3, 3)), columns = list(‘bcd‘), index =                    [‘Ohio‘, ‘Texas‘, ‘Colorado‘])
df2 = pd.DataFrame(np.arange(12).reshape((4, 3)), columns = list(‘bde‘), index = [‘Utah‘, ‘Ohio‘, ‘Texas‘, ‘Oregon‘])
df1, df2
df1 + df2

#在算术方法中填充值
df1 = pd.DataFrame(np.arange(12.).reshape((3, 4)), columns = list(‘abcd‘))
df2 = pd.DataFrame(np.arange(20.).reshape((4, 5)), columns = list(‘abcde‘))
df1
df2
#将它们相加时,没有重叠的位置会产生Na
df1 + df2

#使用df1的add方法,传入df2以及一个fill_value参数
df1.add(df2, fill_value = 0)
#在对Series或DataFrame重新索引时,也可以指定一个填充值
df1.reindex(columns = df2.columns, fill_value = 0)

灵活的算术方法

5、DataFrame和Series之间的运算

#DataFrame和Series之间的运算
arr = np.arange(12.).reshape((3, 4))
arr
arr[0]
arr - arr[0]
#以上叫做广播
#DataFrame和Series之间的运算示例
frame = pd.DataFrame(np.arange(12).reshape((4, 3)), columns = list(‘bde‘), index = [‘Utah‘, ‘Ohio‘, ‘Texas‘, ‘Oregon‘])
#选取标识为0的行,即第一行
series = frame.ix[0]
frame
series

#默认情况下,DataFrame和Series之间的运算会将Series的索引匹配到DataFrame的列,然后沿着行一直向下广播
frame - series

#如果找不到,则参与运算的两个对象就会被重新索引以形成并集
series2 = pd.Series(range(3), index = list(‘bef‘))
series2
frame + series2 

6、函数应用与映射

#函数应用和映射
frame = pd.DataFrame(np.random.randn(4, 3), columns = list(‘bde‘), index = [‘Utah‘, ‘Ohio‘, ‘Texas‘, ‘Oregon‘])
frame
np.abs(frame)

#另一个常见的操作是,将函数应用到由各列或行所形成的一维数组上。DataFrame的apply方法即可实现功能
#x为输入值,x.max() - x.min()为输出值
f = lambda x: x.max() - x.min()
#输入列最大减最小
frame.apply(f)
#输入行最大减最小
frame.apply(f, axis = 1)

许多最为常见的数组都被实现 成DataFrame方法,如sum和mean,因此无需使用apply方法

除标量值外,传递给apply的函数还可以返回由多个值 组成的Series

def f(x):
    return pd.Series([x.min(), x.max()], index = [‘min‘, ‘max‘])
#还是调用行frame.apply(f)

frame.apply(f)Out[82]:             b         d         emin -2.460592 -0.224366 -0.474713max  0.102727  0.183401  0.485874
#可以尝试一下调用列frame.apply(f, axis = 1)Out[83]:              min       maxUtah   -1.158899  0.201939Ohio   -0.162430  0.485874Texas  -0.474713 -0.112733Oregon -2.460592  0.183401
#此外,元素级的python函数也是可以用的,假如你想得到frame中各个浮点值的格式化字符串,使用applymap即可
#输入元素x为两位小数的浮点字符
format = lambda x: ‘%.2f‘ % x
frame.applymap(format)
format = lambda x: ‘%.2f‘ % x

frame.applymap(format)
Out[85]:
            b      d      e
Utah    -1.16  -0.22   0.20
Ohio     0.10  -0.16   0.49
Texas   -0.22  -0.11  -0.47
Oregon  -2.46   0.18   0.16

之所以中到applymap, 是因为Series有一个用于应用元素级函数的map方法:

#之所以中到applymap, 是因为Series有一个用于应用元素级函数的map方法:#指定e列
frame[‘e‘].map(format)Out[86]: Utah       0.20Ohio       0.49Texas     -0.47Oregon     0.16Name: e, dtype: object

7、排序与排名

时间: 2024-09-28 16:17:18

【学习】数据处理基础知识(基本功能、汇总计算描述统计、层次化索引)【pandas】的相关文章

Flask学习之基础知识与功能

一:flask的背景介绍 Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收http请求并对请求进行预处理,然后触发Flask框架,开发人员基于Flask框架提供的功能对请求进行相应的处理,并返回给用户,如果要返回给用户复杂的内容时,需要借助jinja2模板来实现对模板的处理,即:将模板和数据进行渲染,将渲染后的字符串返回给用户浏览器. "微"(micro) 并不表示你需要

hadoop学习笔记——基础知识及安装

1.核心 HDFS  分布式文件系统    主从结构,一个namenoe和多个datanode, 分别对应独立的物理机器 1) NameNode是主服务器,管理文件系统的命名空间和客户端对文件的访问操作.NameNode执行文件系统的命名空间操作,比如打开关闭重命名文件或者目录等,它也负责数据块到具体DataNode的映射 2)集群中的DataNode管理存储的数据.负责处理文件系统客户端的文件读写请求,并在NameNode的统一调度下进行数据块的创建删除和复制工作. 3)NameNode是所有

Ant学习-001-ant 基础知识及windows环境配置

一.Ant 概要基础知识 Apache Ant 是一个将软件编译.测试.部署等步骤联系在一起加以自动化的一个工具,大多用于Java环境中的软件开发,用以构建应用,或结合其他开源测试工具例如 git.TestNG等搭建持续集成测试开发环境,从而高效.高质量的构建产品. Ant 有以下一些优点: 跨平台,可移植.Ant 是 Java 语言编写的,所以有很好的跨平台性和可移植性,无论是在 windows.Linux,还是 mac. 操作简单. Ant 是由一个内置任务和可选任务组成的,运行时需要一个构

Linux学习 -- Shell基础 -- Bash基本功能

历史命令 history -c   clear -w   写入 ~/.bash_history 默认保存1000条, 可在/etc/profile中修改 调用 Tab补全 命令.目录.文件 命令别名 alias 别名='原命令' 命令执行顺序: 绝对路径或相对路径 > 别名 > Bash的内部命令 > $PATH环境变量中找到的第一个命令(外部命令) 配置文件:/root/.bashrc 删除:unalias 别名 常用快捷键 输入输出重定向 标准输入输出 输出重定向 注意:2和>

.net学习必备基础知识

进入21世纪,开发Windows程序已经成为以Dll为基础,而.NET  Framwork也日益成为我们开发软件的有利工具,下边我们就来先看一下,学习.net的一些必备基础知识. 一,首先.net是由公共语言执行时期(CLR)与基底类别库(BCL)组成.这两个东西是什么呢?我们先来看一下: 1,CLR是公共语言运行时,Common language Runtime 和Java虚拟机一样也是一个运行时环境,他负责资源管理(内存分配和垃圾收集),并保证应用和底层操作系统之间必要的分离.也就是给了我们

SQLServer学习笔记<>.基础知识,一些基本命令,单表查询(null top用法,with ties附加属性,over开窗函数),排名函数

Sqlserver基础知识 (1)创建数据库 创建数据库有两种方式,手动创建和编写sql脚本创建,在这里我采用脚本的方式创建一个名称为TSQLFundamentals2008的数据库.脚本如下:   同时往数据库表插入一些数据,用户后续对数据库的sql的练习.在这里有需要的可以下载相应的脚本进行数据库的初始化.我放到百度云上面,请戳 我:http://yun.baidu.com/share/link?shareid=3635107613&uk=2971209779,提供了<Sqlserver

【学习】基础知识:数组和矢量计量【Numpy】

Numpy是高性能科学计算和数据分析的基础包.功能如下: ndarray 一个具有矢量算法运算和复杂广播能力的快速且节省空间的多维数组 用于对整组数据进行快速运算的标准数学函数(无需编写循环) 用于读写磁盘数据的工具以及用于操作内存映射文件的工具. 线性代数.随机数生成以及傅里叶变换功能 用于集成由C\C++\Fortran等语言编写的代码的工具 numpy本身并没有提供多么高级的数据分析功能,理解numpy数组以及面向数组的计算将有助于更加高效地使用诸如pandas之类的工具 关注的功能集中在

Web前端学习①Web基础知识

<1>Web前端Web基础知识 一.前端工程师的角色 一个网站的建设需要以下角色: ①策划人员:方案 ②美工/UI设计师:设计图 (.psd  .rp) ③前端工程师:静态网页 ④后端工程师:获取数据 ( Java   PHP  .NET) 二.Web的基础知识 1.Web(万维网)与Internet(因特网) ①Internet简介:定义.主要服务.基本实现技术 ②Web与Internet关系 Web是Internet提供的服务. ③Web简介:万维网 2.Web的工作原理 ①Web的工作原

如何学习安卓(android)开发,需要学习哪些基础知识?

随着智能手机的流行,现在很多大大小小的开发商都需要在手机上具备客户端,这里是一片强大的吸金磁场,那么很多想学习android的朋友,都会有个疑问,那就是:安卓(android)应该怎么学,需要哪些基础知识? 下面是我根据自己和周围朋友的一些经验,总结出来的几点,希望对想学安卓(Android)开发的朋友有所帮助. 1.安卓(Android)开发的分类: (1)安卓(Android)底层开发:我们需要掌握C语音.Linux操作系统等比较底层的知识,以后的发展方向应该是驱动.嵌入式开发.协议开发.