目录
1:创建对象
2:查看数据
3:获取数据
4:设置些值
5:缺少数据处理
6:统计描述
7:应用
8:合并数据
9:分组
----------------------------------------------从这里开始-------------------------------------------------------------------------------
习惯上,我们首先导入这二个关键模块
import pandas as pd import numpy as np
1:创建对象
Series结构是基于NumPy的ndarray结构,是一个一维的标签矩阵(感觉跟python里的字典结构有点像)
s = pd.Series([1, 3, 5, np.nan, 6, 8]) print s
datas = pd.date_range('20130101',periods=6) print datas df = pd.DataFrame(np.random.randn(6,4),index=datas,columns=list('ABCD')) #DataFrame通过传递带有日期时间索引和标签列的numpy数组来创建一个数组: print df
DataFrame
通过传递可以转换为序列对象的字典来创建。
df2 = pd.DataFrame({ 'A' : 1., 'B' : pd.Timestamp('20130102'), 'C' : pd.Series(1,index=list(range(4)),dtype='float32'), 'D' : np.array([3] * 4,dtype='int32'), 'E' : pd.Categorical(["test","train","test","train"]), 'F' : 'foo' }) print df2
2:查看数据
查看数据的顶部和底部行
print(df.head()) #顶部,括号里面写数字几就是输出几行
print(df.tail(3))#底部行
显示索引,列和底层numpy数据
print("--------显示索引-------------------") print(df.index) print("--------显示列-------------------") print(df.columns) print("--------显示值-------------------") print(df.values)
描述显示数据的快速统计摘要
print(df.describe())
转置数据
print(df.T) #行列转化
print(df.sort_index(axis=1, ascending=False)) print("---------------------------------------") print(df.sort_values(by='B')) #默认升序
3:获取
选择一个单列,它产生一个Series
,等同于df.A
print(df['A']) print("---------------------------------------") print(df[0:3])
print("---使用标签获取横截面------------------------------------") print(df.loc[datas[0]]) print("---通过标签选择多轴------------------------------------") print(df.loc[:,['A','B']])
print("---显示标签切片,两个端点都在内------------------------------------") print(df.loc [ '20130102':'20130104',[ 'A' ,'B' ]]) print("---获取标量值------------------------------------") print(df.loc[datas[1],'A'])
4:设置值
设置新列自动按索引对齐数据
s1 = pd.Series([1,2,3,4,5,6], index=pd.date_range('20130102', periods=6)) print s1
print("---通过标签设置值------------------------------------") df.at[datas[0],'A']=0 print("---按位置设置值------------------------------------") df.iat[0,1] = 0 print("---通过分配一个numpy数组进行设置------------------------------------") df.loc[:,'D'] = np.array([5] * len(df)) print(df)
5:缺少数据处理
panads主要使用该值
np.nan
来表示缺失的数据。它默认不包含在计算中
df1 = df.reindex(index=datas[0:4], columns=list(df.columns) + ['E']) df1.loc[datas[0]:datas[1],'E'] = 1 print df1
print("---删除任何缺少数据的行。------------------------------------") df1.fillna(value=1) print(df1)
6:统计描述
s = pd.Series([1,3,5,np.nan,6,8],index=datas).shift(2) print s print("--------------------------------") print df.sub(s,axis='index')
7:应用
print df.apply(np.cumsum) print("--------------------------------------------------------") print df.apply(lambda x:x.max() - x.min()) #对数据应用函数:
8:合并数据
print("-合并------------------------------------------------------") df = pd.DataFrame(np.random.randn(10,4)) pieces = [df[:3], df[3:7], df[7:]] print pd.concat(pieces)
9:分组
对于”group by”操作,我们通常是指以下一个或多个操作步骤:
l (Splitting)按照一些规则将数据分为不同的组;
l (Applying)对于每组数据分别执行一个函数;
l (Combining)将结果组合到一个数据结构中;
df = pd.DataFrame({'A' : ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo'], 'B' : ['one', 'one', 'two', 'three', 'two', 'two', 'one', 'three'], 'C' : np.random.randn(8), 'D' : np.random.randn(8)}) print df
分组并对每个分组执行sum函数:
通过多个列进行分组形成一个层次索引,然后执行函数:
print df.groupby('A').sum() print "--------------------" print df.groupby(['A','B']).sum()
原文:http://blog.51cto.com/meyangyang/2088348