#coding:utf-8
import pandas as pd
#series创建
##直接创建,默认索引
a=pd.Series([1,2,3])
print a
##通过一组数据创建,指定索引
data1=[4,3,7]
b=pd.Series(data1,index=['one','two','three'])
print b
##通过字典创建,字典key即为索引
data2={'2001':56,'2002':73,'2003':78}
c=pd.Series(data2)
print c
##通过字典创建,指定索引,key与索引自动匹配,匹配不到则空值
year=['2001','2002','2003','2004']
d=pd.Series(data2,index=year)
print d
#Series查看
##查看所有元素
print c.values
##查看索引
print c.index
##查看列
print c['2002']
##查看缺失值(布尔值、函数)
print 56 in c.values
print pd.isnull(d)
##查看唯一值
###索引唯一
print c.index.is_unique
###值唯一
print c.is_unique
print c.unique()
###值频次
print c.value_counts()
#Series修改
##增加元素,连接其他series
a1=pd.Series([1,2,3])
a2=pd.Series([4,3,2])
a3=a1.append(a2)
print a3
##删除元素
a4=a3.drop(2)
print a4
##修改元素值
a4[1]=([5,4])
print a4
##修改索引
d1=d.reindex(['2001','2002','2003','2004','2005'])
print d1
##修改对象及索引名称
d.name='num'
d.index.name='year'
print d
#运算
##Series间(按照索引自动对齐)
print c+d
##Series与标量
print d+2
#排序
##值排序(缺失值默认排到末尾)
print b.sort_values()
##索引排序
print b.sort_index()
#排名
print b.rank()
#dataframe创建
##通过包含列表的字典
data3={'id':[1,2,3],
'year':['2001','2002','2003'],
'name':['a','b','c']
}
df1=pd.DataFrame(data3)
df11=pd.DataFrame(data3,columns=['name','id','year'],index=['11','22','33'])
print df1
print df11
##通过包含Series的字典
data4={'id':pd.Series([1,2,3]),
'year':pd.Series(['2001','2002','2003']),
'name':pd.Series(['a','b','c'])
}
df2=pd.DataFrame(data4)
print df2
##通过嵌套字典
data5={'id':{'a':1,'b':2,'c':3},
'year':{'a':'2001','b':'2002','c':'2003'}
}
df3=pd.DataFrame(data5)
print df3
#dataframe查看
##查看所有行列
print df3.values
##查看行数和列数
print df3.shape[0]
print df3.shape[1]
##查看行
print 'a' in df3.index
print df3[:3]
print df3.ix['a']
##查看列
print 'id' in df3.columns
print df3[['year','id']]
##查看特定行和特定列(loc标签索引,iloc位置索引)
print df3.loc[['a','b'],'year']
print df3.loc[df3['id']>1,['year','id']]
print df3.iloc[0,1]
print df3.iloc[0:1,0:1]
print df3.iloc[[0,1],[0,1]]
##查看缺失值
print df3.isnull()
##查看唯一值
print df3['age'].is_unique
#dataframe修改
##增加行(loc,at,append)
###loc
df3.loc[4]=([4,'2005'])
df3.loc['d']=([4,'2005'])
###at
df3.at['e']=([5,'2005'])
print df3
###append
df3a=pd.DataFrame({'id':[5,6],
'year':['2005','2006'],
},index=['f','g'])
print df3a
df3b=df3.append(df3a,ignore_index=False)
print df3b
##增加列(直接加,insert)
df3['age']=12
df3['salary']=[12,34,45,23,12]
df3.insert(1,'color',['red','blue','black','red','blue','black'])
print df3
##删除行(drop)
df3.drop([3],axis=0,inplace=True)
print df3
##删除列(drop,del)
df3.drop(['color'],axis=1,inplace=True)
del df3['year']
mydel=df3.pop('id')
print mydel
print df3
##删除重复项
print df3.drop_duplicates(subset=['color1'],keep='first',inplace=False)
##删除缺失值
print df3.dropna()#thresh参数n表示,在任一行/列,非空数据至少有n个
print df3.dropna(axis=1)
##修改
###修改形式
df11=df1.T
print df11
###修改值
####按行修改
df3.ix['c']=[4.5,'red',1]
print df3
####按列修改
df3['age']=5
print df3
####特定位置修改(loc,iloc)
df3.loc['e','age']=15
print df3
df3.loc[[3,'e'],'age']=8
print df3
df3.iloc[[1,4],2]=18
print df3
df3.iloc[[1,4],[0,2]]=18
print df3
####填补缺失值
print df3.fillna(0)
###修改索引
####索引重排
print df6.sort_index(axis=1)
####建新索引(新索引与现有索引匹配,新索引有现索引无为NaN,反之则值被丢弃)
print df3.reindex(['a','b','c','d','e','f'],fill_value=0)
print df3.reindex(index=['a','b','c','d','e','h'],columns=['id','color1']).ffill()
print df3.set_index('id',inplace=True)
print df3.reset_index(inplace=True)
####层次化索引
(暂无)
###修改列名称
####修改列名称顺序
df3.columns=['id1','color1','age1']
####修改所有列名称
print df4.reindex(columns=df5.columns,fill_value=0)
####修改特定列名称
df3.rename(columns={'id1':'id','age1':'age'},inplace=True)
#运算
##算术运算
###dataframe间(加减乘除)
data6={'a':[1,2,3,4,5],'b':[4,3,32,4,1]}
data7={'a':[9,2,3,2,5],'b':[4,3,32,4,1],'c':[4, 3, 32, 4, 1]}
df4=pd.DataFrame(data6)
df5=pd.DataFrame(data7)
####直接运算,匹配不到为NaN
print df4+df5
####匹配不到自动补0 (add,sub,div,mul)
print df4.add(df5,fill_value=0)
###dataframe与series间
s2=pd.Series([2,3,5],index=['a','b','c'])
print df4-s2
s3=pd.Series([2,3,5,1,1,],index=df4.index)
print df4.sub(s3,axis=0) #axis表示被匹配的轴
##集合运算
###取交集
print df4.merge(df5,how='inner')
###取并集
print df4.merge(df5,how='outer')
###取差集
df6=df4.append(df5)
print df6
print df6.drop_duplicates(subset=['a','b'],keep=False)
##函数运算
###数组级函数
f=lambda x:x.max()
print df6.apply(f)
print df6.apply(f,axis=1)
###元素级函数
g=lambda y:y*(-2)
print df6.applymap(g)
#排序
##索引排序
print df6.sort_index(axis=1)
##值排序
print df6.sort_index(by=['a','b'])
#排名
print df6.rank(axis=1,method='first',ascending=False)
#描述性统计(sum,mean,cumsum,idxmax,describe.corr,corrwith,cov)
print df6.sum(axis=1,skipna=False)
print df6.idxmax(axis=1,skipna=False)
print df6['a'].corr(df6['b'])
print df6.corrwith(df6['b']),co