pandas的两个主要的数据结构:

Series

series是一种类似于一维数组的对象,它由一组数据(NumPy数组类型的数据)和一组与之相关的数据标签(索引)组成。

 from pandas import Series

 obj = Series((1,2,3,4,5))
obj.index #索引,默认从0开始的整数
obj.values #array数组 #自定义索引的Series
obj_with_index = Series([4,65,3,4],index=['a','b','c','d'])
print(obj_with_index)

可以通过索引的方式选取或修改单个或一组值

 >>> from pandas import Series
>>> obj = Series([1,2,3,4],index=('a','b','c','d'))
>>> obj
a 1
b 2
c 3
d 4
dtype: int64
>>> obj['a']
1
>>> obj['c'] = 8
>>> obj
a 1
b 2
c 8
d 4 >>> obj[('a','b','d')] = (11,12,14)
>>> obj
a 11
b 12
c 8
d 14
dtype: int64
>>>

对其对象进行NumPy运算的时候会保留索引和值之间的链接

>>> obj -2
a 9
b 10
c 6
d 12
dtype: int64
>>> obj[obj > 10]
a 11
b 12
d 14
dtype: int64
>>>

还可以将Series对象看成一个定长的有序的字典,一个索引和值组成的键值对的映射。

可以应用在很多需要字典参数的函数中,例如函数的关键字参数

利用字典作为参数生成一个自定义索引的Series对象

>>> metadata = {"a":1,"b":2,"c":3}
>>> data= Series(metadata)
>>> data
a 1
b 2
c 3
dtype: int64

根据索引去建对象,如果字典的键中没有在索引中,则不会创建该索引-值的映射,索引不在字典的键中,则会对该索引创建一个Nan值(表示缺失或NA值)

可以利用isnull和notnull去判断是不是Nan值

>>> states = ['b','c','d','e']
>>> obj4 = Series(metadata,index = states)
>>> obj4
b 2.0
c 3.0
d NaN
e NaN
dtype: float64 >>> import pandas as pd
>>> pd.isnull(obj4)
b False
c False
d True
e True
dtype: bool
>>> pd.notnull(obj4)
b True
c True
d False
e False
dtype: bool
#series对象本身就有isnull和notnull方法
>>> obj4.isnull()
b False
c False
d True
e True
dtype: bool
>>> obj4.notnull()
b True
c True
d False
e False
dtype: bool

Series一个最重要的功能就是在算术运算中会自动对齐索引。

Series对象及其索引都有一个name属性

dtype: bool
>>> obj4.name ="numpy_array"
>>> obj4.index.name = 'letter'
>>> obj4
letter
b 2.0
c 3.0
d NaN
e NaN
Name: numpy_array, dtype: float64

DataFrame:

DataFrame是一个表格型的数据结构,它含有一组有序的列,每一列可以是不同的值类型。DataFrame不仅有列索引,还有行索引。DataFrame中的数据是以一个或多个二维块存放的。

用等长列表或NumPy数组组成的字典去创建DataFrame对象

>>> data = {'name':['li','wang','yang','sun'],'height':[1.7,1.8,1.6,1.55],'age':[30,31,34,61]}
>>> df_obj = DataFrame(data)
>>> df_obj
age height name
0 30 1.70 li
1 31 1.80 wang
2 34 1.60 yang
3 61 1.55 sun

如果原始数据是嵌套的字典,会将外层字典的建作为列,内层字典的键做为行索引

如果指定了列序列,就会按照指定的列序列的顺序进行排列,行序列会自动生成

>>> df_obj = DataFrame(data,columns=['name','age','height'])
>>> df_obj
name age height
0 li 30 1.70
1 wang 31 1.80
2 yang 34 1.60
3 sun 61 1.55

如果传入的列在数据中找不到也会产生Nan值

>>> df_obj = DataFrame(data,columns=['name','age','height','weight'],index=('a','b','c','d'))
>>> df_obj
name age height weight
a li 30 1.70 NaN
b wang 31 1.80 NaN
c yang 34 1.60 NaN
d sun 61 1.55 NaN
>>>

可以通过字典标记的方式或属性的方式,将DataFrame的列获取为一个Series:

>>> df_obj.columns
Index(['name', 'age', 'height', 'weight'], dtype='object')
>>> df_obj.name
a li
b wang
c yang
d sun
Name: name, dtype: object
>>> df_obj['name']
a li
b wang
c yang
d sun
Name: name, dtype: object

ps:在获取列的时候不仅继承了原来的索引,还将Series的name属性设置好了

也可以给列赋值,但如何是将列表或数组赋值给某列,其长度必须跟DataFrame的长度相同,如果复制的是一个Series对象,就会根据索引去精确匹配

>>> df_obj.weight = 200
>>> df_obj
name age height weight
a li 30 1.70 200
b wang 31 1.80 200
c yang 34 1.60 200
d sun 61 1.55 200

删除列用del关键字

>>> del df_obj['weight']#注意:这里不能用列的属性,即:del df_obj.weigt是错误的
>>> df_obj
name age height
a li 30 1.70
b wang 31 1.80
c yang 34 1.60
d sun 61 1.55

dataframe对象也可以转置

>>> df_obj.T
a b c d
name li wang yang sun
age 30 31 34 61
height 1.7 1.8 1.6 1.55

索引对象

index对象不能被修改,这样保证了多个数据结构能够安全共享

创建索引对象及在Series或DataFrame中使用

>>> index = pd.Int64Index(range(1,6))
>>> index
Int64Index([1, 2, 3, 4, 5], dtype='int64')
>>> data = Series((11,22,33,44,55),index=index)
>>> data
1 11
2 22
3 33
4 44
5 55
>>> index.append(pd.Index((6,)))
Int64Index([1, 2, 3, 4, 5, 6], dtype='int64')

pandas的索引对象

说明
Index  最泛化的Index对象,将轴标签表示为一个由python对象组成的NumPy数组
Int64Index 针对整数的特殊Index
MultiIndex 层次化索引对象,表示单个轴上的多层索引。可以看作由元组组成的数组
DatatimeIndex 存储纳秒级时间戳
PeriodIndex 针对Period数据(时间间隔)的特殊Index
   
   
   

Index对象的方法与属性

方法 属性
append 链接另一个index对象,产生一个新的Index
diff 计算差集,并得到一个Index
intersection 计算交集
union 计算并集
isin 计算一个指示各值是否都包含在参数集合中的布尔型数组
delete 产出索引i出的元素,并得到新的Index
drop 删除传入的值,并得到新的Index
insert 将元素插入到索引i处,并得到新的Index
is_monotonic 将各元素均大于等于前一个元素时,返回True
is_unique 将Index没有重复值时,返回True
unique 返回Index中唯一的数组

pandas(零)数据结构的更多相关文章

  1. Pandas 的数据结构

    Pandas的数据结构 导入pandas: 三剑客 from pandas import Series,DataFrame import pandas as pd import numpy as np ...

  2. pandas的数据结构之series

    Pandas的数据结构 1.Series Series是一种类似于一维数组的对象,由下面两个部分组成: index:相关的数据索引标签 values:一组数据(ndarray类型) series的创建 ...

  3. Pandas的使用(3)---Pandas的数据结构

    Pandas的使用(3) Pandas的数据结构 1.Series 2.DataFrame

  4. Pandas之数据结构

    pandas入门 由于最近公司要求做数据分析,pandas每天必用,只能先跳过numpy的学习,先学习大Pandas库 Pandas是基于Numpy构建的,让以Numpy为中心的应用变得更加简单 pa ...

  5. pandas中数据结构-Series

    pandas中数据结构-Series pandas简介 Pandas是一个开源的,BSD许可的Python库,为Python编程语言提供了高性能,易于使用的数据结构和数据分析工具.Python与Pan ...

  6. 02. Pandas 1|数据结构Series、Dataframe

    1."一维数组"Series Pandas数据结构Series:基本概念及创建 s.index  . s.values # Series 数据结构 # Series 是带有标签的一 ...

  7. Python数据分析Pandas库数据结构(一)

    pandas数据结构 1.生成一维矩阵模拟数据 import pandas as pdimport numpy as nps = pd.Series([1,2,3,4,np.nan,9,9])s2 = ...

  8. pandas 的数据结构(Series, DataFrame)

    Pandas 讲解 Python Data Analysis Library 或 pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的. Pandas 纳入了大量库和一些标 ...

  9. pandas 的数据结构Series与DataFrame

    pandas中有两个主要的数据结构:Series和DataFrame. [Series] Series是一个一维的类似的数组对象,它包含一个数组数据(任何numpy数据类型)和一个与数组关联的索引. ...

  10. pandas的数据结构

    要使用pandas,需要熟悉它的两个主要的数据结构,Series和DataFrame. Series series是一种类似于以为数组的对象,它由一组数据(各种numpy的数据类型)以及一组与之相关的 ...

随机推荐

  1. iOS SDK具体解释之NSCopying协议

    原创blog,转载请注明出处 http://blog.csdn.net/hello_hwc?viewmode=contents 欢迎关注我的iOS SDK具体解释专栏 http://blog.csdn ...

  2. [转]详解JS闭包

    闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现. 闭包的特性 闭包有三个特性: 1.函数嵌套函数 2.函数内部可以引用外部的参数和变量 3.参数 ...

  3. tic-tac-toe游戏代码

    package com.p4f.tictactoe.demo; import javax.swing.border.Border; public class Board { /** * positio ...

  4. TPM Key相关概念

    1. Storage Keys:存储密钥,用来加密数据和其它密钥的通用非对称密钥,这里的其它密钥可以是另外一个存储密钥,也可以是绑定密钥或签名密钥.它本身是长度2048bit的RSA私钥:它既可以是可 ...

  5. hdu5794 A Simple Chess 容斥+Lucas 从(1,1)开始出发,每一步从(x1,y1)到达(x2,y2)满足(x2−x1)^2+(y2−y1)^2=5, x2>x1,y2>y1; 其实就是走日字。而且是往(n,m)方向走的日字。还有r个障碍物,障碍物不可以到达。求(1,1)到(n,m)的路径条数。

    A Simple Chess Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)To ...

  6. Eclipse 任务管理

    管理任务 在Eclipse中用TODO标签管理任务,利用这个功能可以方便地将项目中一些需要处理的任务记录下来. 我们可以在 Java 代码中的注释添加 TODO 单词来标记一个任务,任务可以通过 Ta ...

  7. Eclipse 编译项目

    Eclipse 编译项目 编译 Java 项目 一个项目可以关联多个编译器. java 项目关联的是 java 编译器.可以通过以下方式来查看项目关联的编译器: 在 Package Explorer ...

  8. android EditText 限定中文个数与英文个数的解决方式

    EditText 限定中文8个英文16个的解决方法. 在EditText上控件提供的属性中有限定最大最小长度的方法. 可是,对于输入时,限定中文8个英文16个时,怎么办?相当于一个中文的长度是两个英文 ...

  9. 从外部访问 Template (模板)的控件、获取它的属性值

    DataTemplate 和 ControlTemplate 两个类均派生自 FrameWorkTemplate类.这个类有个 FindName方法 供我们查询内部控件.  ControlTempla ...

  10. 关闭QQ看点

    手机qq联系人 然后右上角公众号 然后看到看点 取消关注!!!