Pandas
大纲
Pandas
- 具备按轴自动或显式数据对齐功能的数据结构。
- 集成时间序列功能
- 数学运算和约减
- 灵活处理缺失数据
- 合并及其他出现在常见数据库(SQL)中的关系型运算
pandas数据结构介绍
Series
Series是一种类似于一维数组的对象,表现形式:索引(index)在左边,值(value)在右边
还可以将 Series看做 是一个定长的有序字典,它是索引值到数据的一个映射
from pandas import Series,DataFrame
import pandas as pd
obj = Series([4,5,6,7])
print(obj)
obj.index = ['a','b','c','d']
print(obj)
print(obj.index)# 自动创建索引
print(obj[2]) # pandas 与numpy不同,可以通过索引选取Series中单个或一组值
# Series可以通过字典来创建
sdata = {'dwd':3434,'tawe':3242342,'oijdf':4234234}# 左索引,右值
obj3 = Series(sdata)
print(obj3)
states = ['wafzx','dwd','tawe','oijdf']
obj4 = Series(sdata,index=states)# 会将sdata中与index相匹配的值当到相应位置
# NaN (not a number)
print(obj4)
print(pd.isnull(obj4))# 判断值是否为缺失(缺失为True)
print(pd.notnull(obj4))# 判断值是否缺失(未缺失为True)
# Series 中的index 和 本身都有一个name属性
obj4.index.name = 'state'
obj4.name = 'populartion'
print(obj4)
Dataframe
Dataframe 是一个表格型的数据结构,有行索引和列索引。
# 由等长字典,构建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)
print(frame)
# 列按照指定顺序进行排列
frame2 = DataFrame(data,columns=['year','state','pop'])
print(frame2)
frame3 = DataFrame(data,columns=['year','state','pop','debt'],
index=['one','two','three','four','five'])
print(frame3)
# 通过类似字典的方式,可将DataFrame的列获取为一个Series
print(frame3['state'])
print(frame3.year)
# 行索引ix
print(frame3.ix['three'])
# 列可以通过赋值的方式进行修改
frame3('debt') = 16.5
# del 用作删除
del frame3['debt']
print(frame3)
# 嵌套字典(外层字典的键作为列索引,内层字典的 键做行索引)
pop = {'niubi':{2001:1,2002:2},'zade':{2001:3,2002:4}}
frame4 = DataFrame(pop)
print(frame4)
索引对象
index 对象是不可修改的(immutable)
index的属性和方法
基本功能
重新索引(reindex)
obj = Series([4.5,7.4,-5.3,3.6], index=['d','b','a','c'])
print(obj)
# reindex将根据新索引重新排
obj2 = obj.reindex(['a','b','c','d','e'])
print(obj2)
# ffill 前填充 bfill后填充
obj3 = obj.reindex(range(4)).bfill()
print(obj3)
reindex函数的参数
丢弃指定轴上的项(drop)
obj = Series(np.arange(5), index=['d','b','a','c','e'])
print(obj)
# drop 删除指定轴上数值并返回一个新对象
new_obj = obj.drop('c')
print(new_obj)
索引,选取,过滤
算数运算和数据对齐
算数方法中填充值
对不同的索引对象进行算术运算时,则结果的索引就是该索引对的并集
df1 = DataFrame(np.arange(12).reshape((3,4)),columns=list('abcd') )
df2 = DataFrame(np.arange(20).reshape((4,5)),columns=list('abcde') )
print(df1)
print(df2)
# 对不同的索引对象进行算术运算时,则结果的索引就是**该索引对的并集**
print(df1+df2)
# 算数方法
print(df1.add(df2,fill_value=0))
print(df1.reindex(columns=df2.columns,fill_value=0))
排序和排名(sort,rank)
obj = Series(range(4),index=['a','b','c','d'])
# Series 排序
print(obj.sort_index())
print(obj.rank(method='first'))
# DataFrame 排序
frame = DataFrame(np.arange(8).reshape((2,4)),index=['three','one'] ,
columns=['d','a','c','d'])
# 返回一个新对象
print(frame.sort_index())
# 行0列1
print(frame.sort_index(axis=1))
# 按降序排序
print(frame.sort_index(axis=1,ascending=False))
汇总和计算描述
处理缺失数据
pandas 设计目的之一就是让缺失数据的处理任务尽量轻松