pandas含使得数据分析工作变得更快更简洁的高级数据结构和操作工具,基于NumPy构建。pandas的引入约定:(因为Series和DataFrame使用次数多,将其引入本地命名空间)
from pandas import Series, DataFrame
import pandas as pd
pandas 数据结构
Series
Series是一种类似于以为数组的对象,由一组数据(各种NumPy数据类型)以及一组与之相关的数据标签(索引)组成,可以通过Series的values和index获取其数组表示形式和索引对象。
可以为数据指定索引,通过索引的方式选取Series中的单个或一组值
NumPy数组运算(如根据布尔型数组进行过滤、标量乘法、应用数学函数等)都会保留索引和值之间的链接
In: obj2 = Series([4, 7, -5, 3], index=['d','b','a','c'])
In: obj2[obj2 > 0]
Out: d 6
b 7
c 3
- 可以将Series看成一个定长的有序字典
In: 'b' in obj2
Out: True
In: 'e' in obj2
Out: False
In: sdata = {'Ohio': 35000, 'Texas': 71000, 'Oregon': 16000, 'Utah': 5000}
Out: obj3 = Series(sdata)
In: obj3
Out: Ohio 35000
Oregon 16000
Texas 71000
Utah 5000
- 使用missing或NA表示缺失数据,isnull和notnull函数可用于检测缺失数据:
pd.isnull(obj4); pd.notnull(obj4)
obj4.isnull()
在算术运算中自动对齐不同索引的数据
Series对象本身及其索引都有一个name属性,该属性跟pandas其他的关键功能关系非常密切
In [125]: obj3.name = 'population'
In [126]: obj3.index.name = 'state'
In [127]: obj3
Out[127]:
state
Ohio 35000
Oregon 16000
Texas 71000
Utah 5000
Name: population, dtype: int64
- Series索引可以通过赋值就地修改
DataFrame
DataFrame是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型。DataFrame既有行索引也有列索引。
- 构建DataFrame最常用的方法是直接传入一个由等长列表或numpy数组组成的字典
In [128]: data = {'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada'],
...: 'year': [2000, 2001, 2002, 2001, 2002],
...: 'pop': [1.5, 1.7, 3.6, 2.4, 2.9]}
In [129]: frame = DataFrame(data)
In [130]: frame
Out[130]:
pop state year
0 1.5 Ohio 2000
1 1.7 Ohio 2001
2 3.6 Ohio 2002
3 2.4 Nevada 2001
4 2.9 Nevada 2002
- 如果制定了列序列,DataFrame的列会按照指定顺序排列;如果传入的列在数据中找不到,产生NaN值:
In [132]: DataFrame(data, columns = ['year', 'state', 'pop'])
Out[132]:
year state pop
0 2000 Ohio 1.5
1 2001 Ohio 1.7
2 2002 Ohio 3.6
3 2001 Nevada 2.4
4 2002 Nevada 2.9
In [133]: frame2 = DataFrame(data, columns = ['year', 'state', 'pop', 'debt'], index=['one', 'two', 'three', 'four', 'five'])
In [134]: frame2
Out[134]:
year state pop debt
one 2000 Ohio 1.5 NaN
two 2001 Ohio 1.7 NaN
three 2002 Ohio 3.6 NaN
four 2001 Nevada 2.4 NaN
five 2002 Nevada 2.9 NaN
- 通过类似字典标记的方式或属性方式,将DataFrame的列获取为一个Series:
In [135]: frame2['state']
Out[135]:
one Ohio
two Ohio
three Ohio
four Nevada
five Nevada
Name: state, dtype: object
In [136]: frame2.year
Out[136]:
one 2000
two 2001
three 2002
four 2001
five 2002
Name: year, dtype: int64
- 通过位置或名称获取行信息,如用索引字段ix(anaconda3 用loc)
In [138]: frame2.loc['three']
Out[138]:
year 2002
state Ohio
pop 3.6
debt NaN
Name: three, dtype: object
赋值给列:将列表或数组赋值给某个列时,其长度必须跟DataFrame的长度相匹配。如果赋值的是一个Series,就会精确匹配DataFrame的索引,所有的空位都将被填上缺失值。为不存在的列赋值会创建出一个新列。
传入嵌套字典(字典的字典):外层字典的键作为列,内层键则作为行索引。
In [139]: pop = {'Nevada': {2001: 2.4, 2002: 2.9}, 'Ohio': {2000: 1.5, 2001: 1.7, 2002: 3.6}}
In [140]: frame3 = DataFrame(pop)
In [141]: frame3
Out[141]:
Nevada Ohio
2000 NaN 1.5
2001 2.4 1.7
2002 2.9 3.6
索引对象
- 索引对象是不可修改,这样才能是index对象在多个数据结构间安全共享。