Python数据分析之pandas基本数据结构:Series、DataFrame
1引言
本文总结Pandas中两种常用的数据类型:
(1)Series是一种一维的带标签数组对象。
(2)DataFrame,二维,Series容器
2 Series数组
2.1 Series数组构成
Series数组对象由两部分构成:
- 值(value):一维数组的各元素值,是一个ndarray类型数据。
- 索引(index):与一维数组值一一对应的标签。利用索引,我们可非常方便得在Series数组中进行取值。
如下所示,我们通过字典创建了一个Series数组,输出结果的第一列就是索引,第二列就是数组的具体值。
>>> import pandas as pd
>>> a =pd.Series([, , , ])
>>> a dtype: int64
也可以在创建时手动指定索引:
>>> a = pd.Series([, , , ], index=['第一列', '第二列', '第三列', '第四列'])
>>> a
第一列
第二列
第三列
第四列
dtype: int64
利用索引,我们可以更加方便得在数组中进行取值:
>>> a['第一列'] >>> a[['第一列', '第二列']]
第一列
第二列
dtype: int64
当然,你也可以使用以往的数字下标从数组中取值:
>>> a[] >>> a[[,]]
第一列
第二列
dtype: int64
2.2 创建Series数组
(1)通过list、tuple创建
>>> pd.Series([123, 321, 345,543]) # 传入一个list
0 123
1 321
2 345
3 543
dtype: int64
>>> pd.Series((123, 321, 345,543)) # 传入一个元组
0 123
1 321
2 345
3 543
dtype: int64
(2)通过传入一维numpy数组对象创建
>>> import numpy as np
>>> n = np.arange(3) # 创建一个一维的numpy数组
>>> pd.Series(n)
0 0
1 1
2 2
dtype: int32
注意:传入的numpy必须是一维的数组,否则会报错。
>>> n = np.arange(6).reshape((2,3))
>>> pd.Series(n)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
……
packages\pandas\core\internals\construction.py", line 729, in sanitize_array
raise Exception("Data must be 1-dimensional")
Exception: Data must be 1-dimensional
(3)通过传入字典创建
通过字典创建Series数组时,字典的key会自动被设置成Series数组的索引:
>>> pd.Series({'name':'张三', 'age':40, 'weight':140})
name 张三
age 40
weight 140
dtype: object
(4)通过传入一个标量值创建
当传入一个标量值时,必须传入index索引,Series会根据传入的index参数来确定数组对象的长度:
>>> a = pd.Series(10, index=['a', 'b', 'c', 'd'])
>>> a
a 10
b 10
c 10
d 10
dtype: int64
2.2 Series数组常用属性
Series数组的属性与numpy数组属性很是类似,如下表所示:
|
Series.index
|
以列表的形式返回数组的索引
|
|
Series.values
|
以列表的形式返回数组的所有值
|
|
Series.dtype
|
返回基础数据的dtype对象,数据类型
|
|
Series.shape
|
返回基础数据形状的元组
|
|
Series.ndim
|
根据定义1,数组的维数
|
|
Series.size
|
返回数组中的元素数
|
|
Series.base
|
如果与另一数组共享数据,则返回基础数组
|
|
Series.T
|
转置
|
|
Series.empty
|
判断数组是否为空
|
|
Series.name
|
返回系列的名称
|
3 DataFrame数组
3.1 DataFrame数组构成
DataFrame数组是Pandas中另一种数据结构,其数据的呈现方式类似于Excel这种二维表结构。相比于Series数组,DataFrame可以存放多维数据,所以DataFrame不仅仅有索引,还有列名,如下所示:
>>> d = {'one': [1, 2, 3, 4], 'two':['一', '二', '三', '四']}
>>> pd.DataFrame(d)
one two
0 1 一
1 2 二
2 3 三
3 4 四
>>> df.index
RangeIndex(start=0, stop=4, step=1)
>>> df.columns
Index(['one', 'two'], dtype='object')
可以看到,DataFrame数组可以包含多维数据,类似于一张二维表。与Series类似,DataFrame数组也有一个index索引,在不指定索引时,通常会自动生成从零开始步长为1的索引。此外DataFrame数组还有一个列名,索引和列名是从数组中挑选数据的重要依据。
3.2 创建DataFrame数组
(1)通过字典创建
通过字典来创建DataFrame数组时,字典的键将会自动成DataFrame数组的列名,字典的值必须是可迭代对象,例如Series、numpy数组、list、tuple等,不同Series数组中对应的缺失值pandas将自动填充NaN:
以list列表为值的字典:
>>> d = {'one': [1, 2, 3, 4], 'two':['一', '二', '三', '四']}
>>> pd.DataFrame(d)
one two
0 1 一
1 2 二
2 3 三
3 4 四
以numpy数组为值得字典:
>>> d = {'zero': np.zeros((3,)), 'ones': np.ones((3,)), 'twos':np.full((3,),2)}
>>> pd.DataFrame(d)
zero ones twos
0 0.0 1.0 2
1 0.0 1.0 2
2 0.0 1.0 2
以Series为值的字典:
>>> d = {'one': pd.Series([1., 2., 3.], index=['a', 'b', 'c']), 'two': pd.Series([1., 2., 3., 4.], index=['a', 'b', 'c', 'd'])}
>>> df = pd.DataFrame(d) # 创建DataFrame数组
>>> df
one two
a 1.0 1.0
b 2.0 2.0
c 3.0 3.0
d NaN 4.0
无论是上面那种类型对象为值的字典,都可以通过下面的方式重新指定列索引:
>>> pd.DataFrame(d, index=['d', 'b', 'a'])
one two
d NaN 4.0
b 2.0 2.0
a 1.0 1.0
当然,也可以在手动指定列名,不过行索引对应的键数据才会传入新建的数组中:
>>> pd.DataFrame(d, index=['d', 'b', 'a'], columns=['two', 'three'])
two three
d 4.0 NaN
b 2.0 NaN
a 1.0 NaN
(2)通过列表创建
通过列表创建DataFrame数组时,列表的每一个元素必须是字典,这样,字典的键将作为列名。
>>> d = [{'a': 1, 'b': 2}, {'a': 5, 'b': 10, 'c': 20}]
>>> pd.DataFrame(d)
a b c
0 1 2 NaN
1 5 10 20.0
>>> pd.DataFrame(d, index=['第一行', '第二行']) # 重新指定索引
a b c
第一行 1 2 NaN
第二行 5 10 20.0
(3)通过功能函数创建
我们还可以通过诸如from_dict()、from_records()这类的功能函数来创建DataFrame数组,以from_dict()为例:
>>> d = {'A': [1, 2, 3], 'B': [4, 5, 6]}
>>> pd.DataFrame.from_dict(d)
A B
0 1 4
1 2 5
2 3 6
如果需要让字典的键作为索引,重新指定列名,可以传入orient='index'参数,然后重新传入列名:
>>> pd.DataFrame.from_dict(d,orient='index', columns=['one', 'two', 'three'])
one two three
A 1 2 3
B 4 5 6
3.3 DataFrame数组的常用属性
DataFrame数组的属性与Series数据几乎一样,只是多了一个保存列名信息的columns属性,参看上面表格中的Series属性就行了。
4 总结
Python数据分析之pandas基本数据结构:Series、DataFrame的更多相关文章
- python数据分析之pandas库的Series应用
一.pandas的数据结构介绍 1. Series 1.1 Series是由一种类似于一维数组的对象,它由一组数据以及一组与之相关的数据索引构成.仅由一组数据可产生最简单的Series. from p ...
- Python数据分析库pandas基本操作
Python数据分析库pandas基本操作2017年02月20日 17:09:06 birdlove1987 阅读数:22631 标签: python 数据分析 pandas 更多 个人分类: Pyt ...
- pandas中数据结构-Series
pandas中数据结构-Series pandas简介 Pandas是一个开源的,BSD许可的Python库,为Python编程语言提供了高性能,易于使用的数据结构和数据分析工具.Python与Pan ...
- Python 数据分析:Pandas 缺省值的判断
Python 数据分析:Pandas 缺省值的判断 背景 我们从数据库中取出数据存入 Pandas None 转换成 NaN 或 NaT.但是,我们将 Pandas 数据写入数据库时又需要转换成 No ...
- 利用Python进行数据分析:【Pandas】(Series+DataFrame)
一.pandas简单介绍 1.pandas是一个强大的Python数据分析的工具包.2.pandas是基于NumPy构建的.3.pandas的主要功能 --具备对其功能的数据结构DataFrame.S ...
- 02. Pandas 1|数据结构Series、Dataframe
1."一维数组"Series Pandas数据结构Series:基本概念及创建 s.index . s.values # Series 数据结构 # Series 是带有标签的一 ...
- python数据分析之pandas库的DataFrame应用二
本节介绍Series和DataFrame中的数据的基本手段 重新索引 pandas对象的一个重要方法就是reindex,作用是创建一个适应新索引的新对象 ''' Created on 2016-8-1 ...
- pandas 的数据结构Series与DataFrame
pandas中有两个主要的数据结构:Series和DataFrame. [Series] Series是一个一维的类似的数组对象,它包含一个数组数据(任何numpy数据类型)和一个与数组关联的索引. ...
- Python数据分析之pandas学习
Python中的pandas模块进行数据分析. 接下来pandas介绍中将学习到如下8块内容:1.数据结构简介:DataFrame和Series2.数据索引index3.利用pandas查询数据4.利 ...
随机推荐
- 通过sysbench工具实现MySQL数据库的性能测试
1.背景 sysbench是一款压力测试工具,可以测试系统的硬件性能,也可以用来对数据库进行基准测试.sysbench 支持的测试有CPU运算性能测试.内存分配及传输速度测试.磁盘IO性能测试.POS ...
- 谈谈用Boox Max 2 阅读A4纸文献的体验
首先说说选择Boox的几个原因: 护眼.这个不用多说,之所以除了电脑,还要电子阅读器,主要是为了护眼. 减少纸质书籍购买.纸质书籍拿在手上是有质感,读起来也更舒服,可一则一些外文书买纸质的是很贵的,相 ...
- [__NSCFString countByEnumeratingWithState:objects:count:]: unrecognized selector sent to instance 0x17deba00
还真是一波未平一波又起,又出现了这个问题,详情如下: -[__NSCFString countByEnumeratingWithState:objects:count:]: unrecognized ...
- 基于vue2.0搭建项目流程
搭建vue2.0项目--myproject 一. 环境搭建: 1 打开命令行(cmd) 2 安装node node官网 3 安装 vue-cli步骤如下: npm install -g vue-cli ...
- Mysql索引进阶入门
1. 索引操作 MySQL 索引 菜鸟 2. 索引类型 PRIMARY 唯一且不能为空:一张表只能有一个主键索引 INDEX 普通索引 UNIQUE 唯一性索引 FULLTEXT 全文索引:用于搜索很 ...
- 使用top查看进程和系统负载信息
引言 使用top命令,可以查看正在运行的进程和系统负载信息,包括cpu负载.内存使用.各个进程所占系统资源等,top可以以一定频率更新这些统计信息.下面我们来学习top命令的具体使用方法. ...
- Redis的分布式和主备配置调研
目前Redis实现集群的方法主要是采用一致性哈稀分片(Shard),将不同的key分配到不同的redis server上,达到横向扩展的目的. 对于一致性哈稀分片的算法,Jedis-2.0.0已经提供 ...
- Python 学习笔记(6)— 字符串格式化
字符串格式化处理 远古写法 以前通常使用运算符号 % ,%s 插入的值 String 类型,%.3f 指插入的值为包含 3 位小数的浮点数: format1 = "%s, %s!" ...
- 如何删除GIT仓库中的敏感信息
如何删除GIT仓库中的敏感信息 正常Git仓库中应该尽量不包含数据库连接/AWS帐号/巨大二进制文件,否则一旦泄漏到Github,这些非常敏感信息会影响客户的信息安全已经公司的信誉.公司可能其它还有相 ...
- 对博弈活动中蕴含的信息论原理的讨论,以及从熵角度看不同词素抽象方式在WEBSHELL文本检测中的效果区别
1. 从赛马说起 0x1:赛马问题场景介绍 假设在一场赛马中有m匹马参赛,令第i匹参赛马获胜的概率为pi,如果第i匹马获胜,那么机会收益为oi比1,即在第i匹马上每投资一美元,如果赢了,会得到oi美元 ...