一、Pandas数据结构介绍
Series:
Series是一种类似于一维数组的对象,是由一组数据以及一组与之相关联的标签(即索引)组成的,具体的表现形式就是索引在左边,值在右边。
import pandas as pd
import numpy as np
1.创建Series
a.通过列表创建Series:
直接创建Series,索引的值是默认的自动创建一个0到N-1的整数索引:
obj = pd.Series([4,7,-5,3])
创建Series并且为其设置索引:
obj2 = pd.Series([4,7,-5,3], index=['d','b','a','c'])
b.通过字典创建Series:
如果只传入一个字典,则结果Series中的索引就是原字典的键,而且是按键值有序排列:
sdata = {'Ohio':35000,'Texas':71000,'Oregon':16000,'Utah':5000}
obj3 = pd.Series(sdata)
用字典创建Series时,同时为Series设置index属性,结果Series的索引以index的参数值为准,若存在索引没有对应值的情况,则结果就是NaN:
sdata = {'Ohio':35000,'Texas':71000,'Oregon':16000,'Utah':5000}
states = ['California','Ohio','Oregon','Texas']
obj3 = pd.Series(sdata, index=states)
在这个例子里sdata中和索引states相匹配的那三个值会被找出来放到相应的位置上,但是'Carlifornia'所对应的sdata值找不到,其结果只能是NaN
2.Series的基本属性、函数:
a.通过Series的values和index属性获取其数组表示形式和索引对象:
obj = pd.Series([4,7,-5,3])
obj.values
obj.index
b.通过pandas的isnull()函数,notnull()函数以及Series的isnull()实例方法检测缺失数据:
pd.isnull(obj4)
pd.notnull(obj4)
obj4.isnull()
c.Series的name属性和Series索引的name属性:
obj4.name='population'
obj4.index.name='state'
DataFrame:
DataFrame是一个表型的数据结构,它含有一组有序的列,每列间可以是不同的数据类型(数值,字符串,布尔值等)。DataFrame既有行索引又有列索引,其中的数据是以一个或多个二维块存放的,而不是列表,字典或别的一维数据结构。虽然它是个二维的结构,但是DataFrame任然可以表示更高维的数据(利用层次化索引的表结构)。
1.创建DataFrame:
a.由等长的列表或Numpy数组组成的字典创建DataFrame:
data = {'state':['Ohio','Ohio','Ohio','Nevada','Nevada'],
'year':[2000,,2001,2002,2001,2002],
'pop':[1.5,1.7,3.6,2.4,2.9]}
frame = pd.DataFrame(data)
由等长的列表或Numpy数组组成的字典创建DataFrame,同时指定列顺序:
data = {'state':['Ohio','Ohio','Ohio','Nevada','Nevada'],
'year':[2000,2001,2002,2001,2002],
'pop':[1.5,1.7,3.6,2.4,2.9]}
frame = pd.DataFrame(data,columns=['year','state','pop'])
和Series一样,如果传入index的参数在数据中找不到对应值,就会产生NaN:
frame2 = pd.DataFrame(data,columns=['years','state','pop','dept'],index=['one','two','three','four','five'])
通过嵌套字典创建DataFrame:
如果将嵌套字典传递DataFrame,外层字典的键作为列,内层键则作为行索引:
pop = {'Nevada':{2001:2.4,2002:2.9},
'Ohio':{2000:1.5,2001:1.7,2002:3.6}}
frame3 = pd.DataFrame(pop)
2.DataFrame的列操作:
DataFrame的列获取为一个Series:
frame2['state']
frame2.year
列可以通过赋值的方式进行修改:
将数值赋值给DataFrame的一列时,整个一列都是该数值;将列表或数组赋值给DataFrame的一列时,要求其长度和DataFrame的长度相等;将一个Series赋值给DataFrame的一列,会精确的将Series和DataFrame的匹配并进行赋值,所有空位上都是缺失值:
frame2['debt'] = 16.5
frame2['debt'] = np.arange(5)
val = pd.Series([-1.2,-1.5,-1.7], index=['two','four','five'])
frame2['debt'] = val
删除DataFrame的一行:
通过关键字del删除