02-pandas数据结构介绍

前言

pandas有两个重要的数据结构:seriesdataframe
你使用pandas的第一步就是引入pandas(就和java要引入包一样)

1
2
3
4
#引入pandas
from pandas import Series,DataFrame
import pandas as pd
import numpy as np

Series

Series是一种类似于一维数组的对象,它由一组数据和与之相关的标签(索引)组成,接下来创建一个最简答的Series

创建Series

由一组数据简单创建

  • 没有指定索引,索引默认从0开始
    1
    2
    obj = Series([4,7,-5,3])#简单创建,没有指定索引,索引默认从0开始
    obj


可以使用Series的values和index属性获取其数组表示形式和索引对象

1
obj.values


1
obj.index

  • 指定索引创建
1
2
3
#指定索引创建
obj2 = Series([4,7,-5,3],index = ['d','b','a','c'])
obj


通过索引的方式选取Series的单个或者一组值

1
2
#通过索引的方式选取Series中的单个或者一组值
obj2['a']

选取值大于0的数据

值都乘以2

取以e为底的指数

可以把Series看成是一个定长的有序字典,因为它是索引值到数据值得一个映射。于是它就可以使用许多需要字典参数的函数中:

字典创建Series

如果只是传入字典,不指定索引,那么Series的索引就是字典的键(有序排列)

1
2
3
sdata = {'ohio':3500,'Texas':71000,'Oregon':1111}
obj3 = Series(sdata)
obj3


1
2
3
states = ['California','ohio','Oregon',Texas']
obj4 = Series(sdata,index = states)
obj4


在上面的例子中stata的索引会和传入的states索引相匹配的三个值找出来并发到相应的位置上,但是由于’California’对应在sdata的值找不到,所以结果就是NAN(”非数字”not a number,在pandas表示缺失值)。
pandas的isnull和notnull函数可以用于检测缺失值

Series也有类似的实例方法:

name属性

Series对象本身和索引都有一个name属性

Series的索引可以赋值修改

DataFrame

DataFrame是一个表格型的数据结构,含有一组有序的列,每列可以是不同的数值。DataFrame有行索引也有列索引

创建DataFrame

直接传入由等长列表或者Numpy数组组成的字典

1
2
3
4
5
data = {'state':['Ohio','Ohio','Ohio','Neveda','Neveda'],
'year':[2000,2001,2002,2003,2004],
'pop':[1.5,1.7,3.6,2.4,2.9] }
frame = DataFrame(data)
frame


从上面可以找到,DataFrame自动加上了行索引,且全部有序排列

指定列序列,DataFrame的列就会按照指定的顺序排列

1
2
#指定了列序列,就会列就会按照指定的顺序排列
DataFrame(data,columns = ['year','state','pop'])

和Series一样,如果传入的列在数据中找不到,就会产生NA值

1
2
3
#传入的列在数据中找不到,就会产生NA值
frame2 = DataFrame(data,columns = ['year','state','pop','debt'],index = ['one','two','three','four','five'])
frame2

通过columns属性返回列索引

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

赋值方法修改列

列表或者数组赋值给DataFrame某个列时,长度必须和DataFrame列的长度长度匹配。如果赋值的是一个Series,Series的索引就会精确匹配DataFrame的索引,所有的空位都将被填上缺失值

1
2
3
val= Series([-1.2,-1.5,-1.7],index = ['two','four','five'])
frame2['dept'] = val
frame2

如果为不存在的列赋值,就会创建出一个新列。

1
2
frame2['eastern'] = frame2.state=='Ohio'
frame2

关键字del用于删除列

【注意:】通过索引方式返回列的是相应数据的试图,不是副本。所以,对返回的Series所做的任何就地的修改全都反应在源DataFrame上。通过Series的copy方法可以显示的复制列

嵌套字典(字典中的字典)

外层字典的键作为列索引,内层字典的键作为行索引

结果转置

如果不显示的指定索引,那么内层字典的键会被合并,排序形成最终的索引,如果显示指定了索引,就会按照指定索引的顺序排列,所有的空位会被缺失值填补

Series组成的字典也差不多

下图列出了DataFrame构造函数能接受的各种数据

DataFrame的name和columns属性

values属性

和Series一样,会以二维ndarray的形式返回DataFrame数据

您的支持将鼓励我继续创作!