python之pandas简单介绍及使用(一)
python之pandas简单介绍及使用(一)
一、 Pandas简介
1、Python Data Analysis Library 或 pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。你很快就会发现,它是使Python成为强大而高效的数据分析环境的重要因素之一。
2、Pandas 是python的一个数据分析包,最初由AQR Capital Management于2008年4月开发,并于2009年底开源出来,目前由专注于Python数据包开发的PyData开发team继续开发和维护,属于PyData项目的一部分。Pandas最初被作为金融数据分析工具而开发出来,因此,pandas为时间序列分析提供了很好的支持。 Pandas的名称来自于面板数据(panel data)和python数据分析(data analysis)。panel data是经济学中关于多维数据集的一个术语,在Pandas中也提供了panel的数据类型。
3、数据结构:
Series:一维数组,与Numpy中的一维array类似。二者与Python基本的数据结构List也很相近,其区别是:List中的元素可以是不同的数据类型,而Array和Series中则只允许存储相同的数据类型,这样可以更有效的使用内存,提高运算效率。
Time- Series:以时间为索引的Series。
DataFrame:二维的表格型数据结构。很多功能与R中的data.frame类似。可以将DataFrame理解为Series的容器。以下的内容主要以DataFrame为主。
Panel :三维的数组,可以理解为DataFrame的容器。
Pandas 有两种自己独有的基本数据结构。读者应该注意的是,它固然有着两种数据结构,因为它依然是 Python 的一个库,所以,Python 中有的数据类型在这里依然适用,也同样还可以使用类自己定义数据类型。只不过,Pandas 里面又定义了两种数据类型:Series 和 DataFrame,它们让数据操作更简单了。
二、 Pandas安装
因为pandas是python的第三方库所以使用前需要安装一下,直接使用pip install pandas 就会自动安装pandas以及相关组件。
三、 Pandas使用
注:本次操作是在ipython中进行
1、导入pandas模块并使用别名,以及导入Series模块,以下使用基于本次导入。
In [1]: from pandas import Series
In [2]: import pandas as pd
2、Series
Series 就如同列表一样,一系列数据,每个数据对应一个索引值。
Series 就是“竖起来”的 list:
In [3]: s = Series([1,4,'ww','tt'])
In [4]: s
Out[4]:
0 1
1 4
2 ww
3 tt
dtype: object
另外一点也很像列表,就是里面的元素的类型,由你任意决定(其实是由需要来决定)。
这里,我们实质上创建了一个 Series 对象,这个对象当然就有其属性和方法了。比如,下面的两个属性依次可以显示 Series 对象的数据值和索引:
In [5]: s.index
Out[5]: RangeIndex(start=0, stop=4, step=1)
In [8]: s.values
Out[8]: array([1, 4, 'ww', 'tt'], dtype=object)
列表的索引只能是从 0 开始的整数,Series 数据类型在默认情况下,其索引也是如此。不过,区别于列表的是,Series 可以自定义索引:
In [9]: s2 = Series(['wangxing','man',24],index=['name','sex','age'])
In [10]: s2
Out[10]:
name wangxing
sex man
age 24
dtype: object
每个元素都有了索引,就可以根据索引操作元素了。还记得 list 中的操作吗?Series 中,也有类似的操作。先看简单的,根据索引查看其值和修改其值:
In [12]: s2['name']
Out[12]: 'wangxing'
In [45]: s2['name'] = 'wudadiao'
In [46]: s2
Out[46]:
name wudadiao
sex man
age 24
dtype: object
这是不是又有点类似 dict 数据了呢?的确如此。看下面就理解了。
读者是否注意到,前面定义 Series 对象的时候,用的是列表,即 Series() 方法的参数中,第一个列表就是其数据值,如果需要定义 index,放在后面,依然是一个列表。除了这种方法之外,还可以用下面的方法定义 Series 对象:
In [13]: sd = {'python':9000,'c++':9001,'c#':9000}
In [14]: s3 = Series(sd)
In [15]: s3
Out[15]:
c# 9000
c++ 9001
python 9000
dtype: int64
现在是否理解为什么前面那个类似 dict 了?因为本来就是可以这样定义的。
这时候,索引依然可以自定义。Pandas 的优势在这里体现出来,如果自定义了索引,自定的索引会自动寻找原来的索引,如果一样的,就取原来索引对应的值,这个可以简称为“自动对齐”。
In [16]: s4 = Series(sd,index=['java','c++','c#'])
In [17]: s4
Out[17]:
java NaN
c++ 9001.0
c# 9000.0
dtype: float64
在 Pandas 中,如果没有值,都对齐赋给 NaN。
Pandas 有专门的方法来判断值是否为空。
In [19]: pd.isnull(s4)
Out[19]:
java True
c++ False
c# False
dtype: bool
此外,Series 对象也有同样的方法:
In [20]: s4.isnull()
Out[20]:
java True
c++ False
c# False
dtype: bool
其实,对索引的名字,是可以从新定义的:
In [21]: s4.index = ['语文','数学','English']
In [22]: s4
Out[22]:
语文 NaN
数学 9001.0
English 9000.0
dtype: float64
对于 Series 数据,也可以做类似下面的运算(关于运算,后面还要详细介绍):
In [23]: s4 * 2
Out[23]:
语文 NaN
数学 18002.0
English 18000.0
dtype: float64
In [24]: s4[s4 > 9000]
Out[24]:
数学 9001.0
dtype: float64
Series就先简要写到这,下面看pandas的另一种数据结构DataFrame.
DataFrame
DataFrame 是一种二维的数据结构,非常接近于电子表格或者类似 mysql 数据库的形式。它的竖行称之为 columns,横行跟前面的 Series 一样,称之为 index,也就是说可以通过 columns 和 index 来确定一个主句的位置。
首先来导入模块
In [27]: from pandas import Series,DataFrame
In [26]: data = {"name":['google','baidu','yahoo'],"marks":[100,200,300],"price":[1,2,3]}
In [28]: f1 = DataFrame(data)
In [29]: f1
Out[29]:
marks name price
0 100 google 1
1 200 baidu 2
2 300 yahoo 3
这是定义一个 DataFrame 对象的常用方法——使用 dict 定义。字典的“键”("name","marks","price")就是 DataFrame 的 columns 的值(名称),字典中每个“键”的“值”是一个列表,它们就是那一竖列中的具体填充数据。上面的定义中没有确定索引,所以,按照惯例(Series 中已经形成的惯例)就是从 0 开始的整数。从上面的结果中很明显表示出来,这就是一个二维的数据结构(类似 excel 或者 mysql 中的查看效果)。
上面的数据显示中,columns 的顺序没有规定,就如同字典中键的顺序一样,但是在 DataFrame 中,columns 跟字典键相比,有一个明显不同,就是其顺序可以被规定,向下面这样做:
In [31]: f2 = DataFrame(data,columns=['name','price','marks'])
In [32]: f2
Out[32]:
name price marks
0 google 1 100
1 baidu 2 200
2 yahoo 3 300
跟 Series 类似的,DataFrame 数据的索引也能够自定义
In [35]: f3 = DataFrame(data,columns=['name','marks','price'],index=['a','b','c'])
In [36]: f3
Out[36]:
name marks price
a google 100 1
b baidu 200 2
c yahoo 300 3
定义 DataFrame 的方法,除了上面的之外,还可以使用“字典套字典”的方式。
In [40]: newdata = {'lang':{'first':'python','second':'java'},'price':{'first':5000,'second':2000}}
In [41]: f4 = DataFrame(newdata)
In [42]: f4
Out[42]:
lang price
first python 5000
second java 2000
在字典中就规定好数列名称(第一层键)和每横行索引(第二层字典键)以及对应的数据(第二层字典值),也就是在字典中规定好了每个数据格子中的数据,没有规定的都是空。
DataFrame 对象的 columns 属性,能够显示素有的 columns 名称。并且,还能用下面类似字典的方式,得到某竖列的全部内容(当然包含索引):
>>> newdata = {"lang":{"firstline":"python","secondline":"java"}, "price":{"firstline":8000}}
>>> f4 = DataFrame(newdata)
>>> f4
lang price
firstline python 8000
secondline java NaN
>>> DataFrame(newdata, index=["firstline","secondline","thirdline"])
lang price
firstline python 8000
secondline java NaN
thirdline NaN NaN
DataFrame 对象的 columns 属性,能够显示素有的 columns 名称。并且,还能用下面类似字典的方式,得到某竖列的全部内容(当然包含索引):
In [44]: f3['name']
Out[44]:
a google
b baidu
c yahoo
Name: name, dtype: object
下面操作是给同一列赋值
newdata1 = {'username':{'first':'wangxing','second':'dadiao'},'age':{'first':24,'second':25}}
In [67]: f6 = DataFrame(newdata1,columns=['username','age','sex'])
In [68]: f6
Out[68]:
username age sex
first wangxing 24 NaN
second dadiao 25 NaN
In [69]: f6['sex'] = 'man'
In [70]: f6
Out[70]:
username age sex
first wangxing 24 man
second dadiao 25 man
也可以单独的赋值,除了能够统一赋值之外,还能够“点对点”添加数值,结合前面的 Series,既然 DataFrame 对象的每竖列都是一个 Series 对象,那么可以先定义一个 Series 对象,然后把它放到 DataFrame 对象中。如下:
ssex = Series(['男','女'],index=['first','second'])
In [72]: f6['sex'] = ssex
In [73]: f6
Out[73]:
username age sex
first wangxing 24 男
second dadiao 25 女
还可以更精准的修改数据吗?当然可以,完全仿照字典的操作:
In [74]: f6['age']['second'] = 30
In [75]: f6
Out[75]:
username age sex
first wangxing 24 男
second dadiao 30 女
参考http://wiki.jikexueyuan.com/project/start-learning-python/312.html所整理。
python之pandas简单介绍及使用(一)的更多相关文章
- python shutil模块简单介绍
python shutil模块简单介绍 简介 shutil模块提供了大量的文件的高级操作.特别针对文件拷贝和删除,主要功能为目录和文件操作以及压缩操作. shutil 模块方法: copy(src, ...
- Python -- Scrapy 框架简单介绍(Scrapy 安装及项目创建)
Python -- Scrapy 框架简单介绍 最近在学习python 爬虫,先后了解学习urllib.urllib2.requests等,后来发现爬虫也有很多框架,而推荐学习最多就是Scrapy框架 ...
- Python+selenium之简单介绍unittest单元测试框架
Python+selenium之简单介绍unittest单元测试框架 一.unittest简单介绍 unittest支持测试自动化,共享测试用例中的初始化和关闭退出代码,在unittest中最小单元是 ...
- python+selenium之简单介绍继承
python+selenium之简单介绍继承 一.此例简单的介绍一下继承 1.面向对象的编程带来的主要好处之一是代码的重用,实现这种重用的方法之一是通过继承机制.继承完全可以理解成类之间的类型和子类型 ...
- python numpy 模块简单介绍
用python自带的list去处理数组效率很低, numpy就诞生了, 它提供了ndarry对象,N-dimensional object, 是存储单一数据类型的多维数组,即所有的元素都是同一种类型. ...
- python paramiko 模块简单介绍
背景,公司的很多服务包括数据库访问都需要通过跳板机访问,为日常工作及使用带来了麻烦,特别数python直接操作数据更是麻烦了,所以一直想实现python 通过跳板机访问数据库的操作. 首先了解到了 p ...
- 5分钟了解Python语言的简单介绍(转载)
< 转载于Python数据之道 - 本公众号秉承“让数据更有价值”的理念,主要分享数据相关的内容,包括数据分析,挖掘,可视化,机器学习,深度学习等.> ...
- [python之路]简单介绍
python介绍 #python是一个什么样的语言?编译型和解释型静态语言和动态语言强类型定义语言和弱类型定义语言python是一门动态解释性的强类型定义语言. #Python的优缺点##优点Pyth ...
- python类的简单介绍
类是面向对象编程的核心, 它扮演相关数据及逻辑的容器角色.它们提供了创建“真实”对象(也就是实例)的蓝图.因为Python 并不强求你以面向对象的方式编程(与Java 不同), 此刻你也可以不学习类. ...
随机推荐
- 05 爬虫之scrapy
一 scrapy框架简介 01 什么是scrapy: Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架,非常出名,非常强悍.所谓的框架就是一个已经被集成了各种功能(高性能异步下载,队 ...
- activiti部署流程定义时出错:INSERT INTO ACT_GE_BYTEARRAY,修改数据库编码
activiti部署流程定义时出错 // 部署流程定义 Deployment deployment = deploymentBuilder.deploy(); 错误信息:(有乱码的...没留下截图.. ...
- zend framwork项目基本操作
1.首先,我们做项目是采用db的方式来编写sql语句的. 2.查询: fetchOne() 查询一个字段,如果没有指定就只查询第一个字段,只能得到一个值. fetchRow() 查询一行数据 ...
- Git的各种状态
考:http://blog.csdn.net/wirelessqa/article/details/19548057 按照文件的存放位置分: 在你自建的Git本地仓库中,有三个区域:本地目录.暂存区. ...
- MongoDB文档的基本操作
1. MongoDB的安装方法 (1)下载MongoDB 相应的版本: (2)设置数据文件和日志文件的存放目录: (3)启动MongoDB服务: (4)将MongoDB作为服务启动. 2. Mongo ...
- QPainter使用不同风格的QBrush来填充区域
效果图: void WgtText::paintEvent(QPaintEvent *event) { QPainter painter(this); painter.setRenderHint(QP ...
- Qt样式表都有哪些属性可以设置
我们可以在Qt助手中输入Qt Style Sheets Reference然后选择List of Pseudo-States 项查看Qt控件支持的所有状态. 附几个参考学习的博客: https://b ...
- @Configuration的使用 和作用
1从spring4.0以后,@Spring boot Application就包含了@ComponentScan,@ComponentScan就不用写了 2@MapperScan(basePackag ...
- 字符串和数组----string
一.初始化string对象的方式 #include <iostream> #include <string> using std::cout; using std::endl; ...
- 逆袭之旅DAY28.XIA.异常处理
2018-07-24 14:42:24 第一种: 第二种: 第三种: 执行 try--catch--finally--return(执行return 退出方法) 代码示例: 输入数字,输出对应课 ...