Pandas 是基于 Numpy 构建的含有更高级数据结构和工具的数据分析包,类似于 Numpy 的核心是 ndarray,pandas 的两个主要数据结构是 Series 和 DataFrame 。
from pandas import Series, DataFrame
import pandas as pd
import numpy as np
Series是一种类似与一维数组的对象,由一组数据以及与之相关的索引组成
notnull() isnull() 用于检测缺失数据
obj = Series([4,7,-5,3])#系统产生默认索引0~N-1
obj2 = Series([4,7,-5,3,], index=['d', 'b', 'a', 'c'])#通过index设定索引
obj2
d 4
b 7
a -5
c 3
dtype: int64
sdata = {'Ohio':35000,'Texas':71000,'Oregon':16000,'Utah':5000}#字典创建Series
obj3 = Series(sdata)
states = ['Calfornia','Ohio','Oregon','Texas']
obj4 = Series(sdata, index=states)#双字典创建Series自动合并相同项
obj4.notnull()
Calfornia False
Ohio True
Oregon True
Texas True
dtype: bool
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 = DataFrame(data)
DataFrame(data,columns=['year','state','pop'])#指定列标顺序
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
重新索引reindex()
reindex的插值method选项:ffill或pad前向填充值 bfill或backfill后向填充值
reindex函数的参数:
index 用作索引的新序列
method 插值方式
fill_value 在重新索引的过程中,需要引入缺失值时使用的代替值
limit 前向或后向填充时的最大填充量
copy 默认为True,无论如何都复制;如果为False,则新旧相等就不复制
obj2 = Series([4,7,-5,3], index=['d', 'b', 'a', 'c'])#Serise结构
obj2 = obj2.reindex(['a','b','c','d','e'])
obj2
a -5.0
b 7.0
c 3.0
d 4.0
e NaN
dtype: float64
丢弃指定轴上的项 drop()
obj2.drop('c')
a -5.0
b 7.0
d 4.0
e NaN
dtype: float64
frame.drop('pop',axis=1)#axis=1表示列
state year
0 Ohio 2000
1 Ohio 2001
2 Ohio 2002
3 Nevada 2001
4 Nevada 2002
DataFrame的索引选项:
obj[val] 选取DataFrame的单个列或一组列
obj.ix[val] 选取DataFrame的单个行或一组行
obj.ix[:,val] 选取单个列或列子集
obj,ix[val1,val2] 同时选取行和列
算术运算和数据对齐
add + sub - div / mul * 使用函数在运算无对应时可填充数值
df1 = DataFrame(np.arange(12.).reshape((3,4)), columns=list('abcd'))
df2 = DataFrame(np.arange(20.).reshape((4,5)), columns=list('abcde'))
df1.add(df2, fill_value=0)
a b c d e
0 0.0 2.0 4.0 6.0 4.0
1 9.0 11.0 13.0 15.0 9.0
2 18.0 20.0 22.0 24.0 14.0
3 15.0 16.0 17.0 18.0 19.0
arr = np.arange(12.).reshape((3,4))
arr - arr[0]
array([[ 0., 0., 0., 0.],
[ 4., 4., 4., 4.],
[ 8., 8., 8., 8.]])
frame = DataFrame(np.arange(12.).reshape((4,3)), columns=list('bde'),
index=['Utah', 'Ohio', 'Texas', 'Oregon'])
series = frame.ix[0] #取frame的第一行
frame - series
b d e
Utah 0.0 0.0 0.0
Ohio 3.0 3.0 3.0
Texas 6.0 6.0 6.0
Oregon 9.0 9.0 9.0
函数的应用与映射
f = lambda x: x.max() - x.min() #自定义函数公式
frame.apply(f)
frame.apply(f,axis=1)
Utah 2.0
Ohio 2.0
Texas 2.0
Oregon 2.0
dtype: float64