pandas是什么?
是它吗?
。。。。很显然pandas没有这个家伙那么可爱。。。。
我们来看看pandas的官网是怎么来定义自己的:
pandas is an open source, easy-to-use data structures and data analysis tools for the Python PRogramming language.
很显然,pandas是python的一个非常强大的数据分析库!
让我们来学习一下它吧!
1.pandas序列
import numpy as npimport pandas as pds_data = pd.Series([1,3,5,7,np.NaN,9,11])#pandas中生产序列的函数,类似于我们平时说的数组print s_data2.pandas数据结构DataFrame
import numpy as npimport pandas as pd#以20170220为基点向后生产时间点dates = pd.date_range('20170220',periods=6)#DataFrame生成函数,行索引为时间点,列索引为ABCDdata = pd.DataFrame(np.random.randn(6,4),index=dates,columns=list('ABCD'))print dataprintprint data.shapeprintprint data.values3.DataFrame的一些操作(1)
import numpy as npimport pandas as pd#设计一个字典d_data = {'A':1,'B':pd.Timestamp('20170220'),'C':range(4),'D':np.arange(4)}print d_data#使用字典生成一个DataFramedf_data = pd.DataFrame(d_data)print df_data#DataFrame中每一列的类型print df_data.dtypes#打印A列print df_data.A#打印B列print df_data.B#B列的类型print type(df_data.B)4.DataFrame的一些操作(2)
import numpy as npimport pandas as pddates = pd.date_range('20170220',periods=6)data = pd.DataFrame(np.random.randn(6,4),index=dates,columns=list('ABCD'))print dataprint#输出DataFrame头部数据,默认为前5行print data.head()#输出输出DataFrame第一行数据print data.head(1)#输出DataFrame尾部数据,默认为后5行print data.tail()#输出输出DataFrame最后一行数据print data.tail(1)#输出行索引print data.index#输出列索引print data.columns#输出DataFrame数据值print data.values#输出DataFrame详细信息print data.describe()5.DataFrame的一些操作(3)
import numpy as npimport pandas as pddates = pd.date_range('20170220',periods=6)data = pd.DataFrame(np.random.randn(6,4),index=dates,columns=list('ABCD'))print dataprint#转置print data.T#输出维度信息print data.shape#转置后的维度信息print data.T.shape#将列索引排序print data.sort_index(axis = 1)#将列索引排序,降序排列print data.sort_index(axis = 1,ascending=False)#将行索引排序,降序排列print data.sort_index(axis = 0,ascending=False)#按照A列的值进行升序排列print data.sort_values(by='A')6.DataFrame的一些操作(4)
import numpy as npimport pandas as pddates = pd.date_range('20170220',periods=6)data = pd.DataFrame(np.random.randn(6,4),index=dates,columns=list('ABCD'))print data#输出A列print data.A#输出A列print data['A']#输出3,4行print data[2:4]#输出3,4行print data['20170222':'20170223']#输出3,4行print data.loc['20170222':'20170223']#输出3,4行print data.iloc[2:4]输出B,C两列print data.loc[:,['B','C']]7.DataFrame的一些操作(5)
import numpy as npimport pandas as pddates = pd.date_range('20170220',periods=6)data = pd.DataFrame(np.random.randn(6,4),index=dates,columns=list('ABCD'))print data#输出A列中大于0的行print data[data.A > 0]#输出大于0的数据,小于等于0的用NaN补位print data[data > 0]#拷贝datadata2 = data.copy()print data2tag = ['a'] * 2 + ['b'] * 2 + ['c'] * 2#在data2中增加TAG列用tag赋值data2['TAG'] = tagprint data2#打印TAG列中为a,c的行print data2[data2.TAG.isin(['a','c'])]8.DataFrame的一些操作(6)
import numpy as npimport pandas as pddates = pd.date_range('20170220',periods=6)data = pd.DataFrame(np.random.randn(6,4),index=dates,columns=list('ABCD'))print data#将第一行第一列元素赋值为100data.iat[0,0] = 100print data#将A列元素用range(6)赋值data.A = range(6)print data#将B列元素赋值为200data.B = 200print data#将3,4列元素赋值为1000data.iloc[:,2:5] = 1000print data9.DataFrame的一些操作(7)
import numpy as npimport pandas as pddates = pd.date_range('20170220',periods = 6)df = pd.DataFrame(np.random.randn(6,4) , index = dates , columns = list('ABCD'))print df#重定义索引,并添加E列dfl = df.reindex(index = dates[0:4],columns = list(df.columns)+['E'])print dfl#将E列中的2,3行赋值为2dfl.loc[dates[1:3],'E'] = 2print dfl#去掉存在NaN元素的行print dfl.dropna()#将NaN元素赋值为5print dfl.fillna(5)#判断每个元素是否为NaNprint pd.isnull(dfl)#求列平均值print dfl.mean()#对每列进行累加print dfl.cumsum()10.DataFrame的一些操作(8)
import numpy as npimport pandas as pddates = pd.date_range('20170220',periods = 6)df = pd.DataFrame(np.random.randn(6,4) , index = dates , columns = list('ABCD'))print dfdfl = df.reindex(index = dates[0:4],columns = list(df.columns)+['E'])print dfl#针对行求平均值print dfl.mean(axis=1)#生成序列并向右平移两位s = pd.Series([1,3,5,np.nan,6,8],index = dates).shift(2)print s#df与s做减法运算print df.sub(s,axis = 'index')#每列进行累加运算print df.apply(np.cumsum)#每列的最大值减去最小值print df.apply(lambda x: x.max() - x.min())11.DataFrame的一些操作(9)
import numpy as npimport pandas as pddates = pd.date_range('20170220',periods = 6)df = pd.DataFrame(np.random.randn(6,4) , index = dates , columns = list('ABCD'))print df#定义一个函数def _sum(x): print(type(x)) return x.sum()#apply函数可以接受一个函数作为参数print df.apply(_sum)s = pd.Series(np.random.randint(10,20,size = 15))print s#统计序列中每个元素出现的次数print s.value_counts()#返回出现次数最多的元素print s.mode()12.DataFrame的一些操作(10)
import numpy as npimport pandas as pddf = pd.DataFrame(np.random.randn(10,4) , columns = list('ABCD'))print df#合并函数dfl = pd.concat([df.iloc[:3],df.iloc[3:7],df.iloc[7:]])print dfl#判断两个DataFrame中元素是否相等print df == dfl13.DataFrame的一些操作(11)
import numpy as npimport pandas as pddf = pd.DataFrame(np.random.randn(10,4) , columns = list('ABCD'))print dfleft = pd.DataFrame({'key':['foo','foo'],'lval':[1,2]})right = pd.DataFrame({'key':['foo','foo'],'rval':[4,5]})print leftprint right#通过key来合并数据print pd.merge(left,right,on='key')s = pd.Series(np.random.randint(1,5,size = 4),index = list('ABCD'))print s#通过序列添加一行print df.append(s,ignore_index = True)14.DataFrame的一些操作(12)
import numpy as npimport pandas as pddf = pd.DataFrame({'A': ['foo','bar','foo','bar', 'foo','bar','foo','bar'], 'B': ['one','one','two','three', 'two','two','one','three'], 'C': np.random.randn(8), 'D': np.random.randn(8)})print dfprint#根据A列的索引求和print df.groupby('A').sum()print#先根据A列的索引,在根据B列的索引求和print df.groupby(['A','B']).sum()print#先根据B列的索引,在根据A列的索引求和print df.groupby(['B','A']).sum()15.DataFrame的一些操作(13)
import pandas as pdimport numpy as np#zip函数可以打包成一个个tupletuples = list(zip(*[['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux'], ['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two']]))print tuples#生成一个多层索引index = pd.MultiIndex.from_tuples(tuples, names=['first', 'second'])print indexprintdf = pd.DataFrame(np.random.randn(8, 2), index=index, columns=['A', 'B'])print dfprint#将列索引变成行索引print df.stack()
16.DataFrame的一些操作(14)
import pandas as pdimport numpy as nptuples = list(zip(*[['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux'], ['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two']]))index = pd.MultiIndex.from_tuples(tuples, names=['first', 'second'])df = pd.DataFrame(np.random.randn(8, 2), index=index, columns=['A', 'B'])print dfprintstacked = df.stack()print stacked#将行索引转换为列索引print stacked.unstack()#转换两次print stacked.unstack().unstack()17.DataFrame的一些操作(15)
import pandas as pdimport numpy as npdf = pd.DataFrame({'A' : ['one', 'one', 'two', 'three'] * 3, 'B' : ['A', 'B', 'C'] * 4, 'C' : ['foo', 'foo', 'foo', 'bar', 'bar', 'bar'] * 2, 'D' : np.random.randn(12), 'E' : np.random.randn(12)})print df#根据A,B索引为行,C的索引为列处理D的值print pd.pivot_table(df, values='D', index=['A', 'B'], columns=['C'])#感觉A列等于one为索引,根据C列组合的平均值print df[df.A=='one'].groupby('C').mean()18.时间序列(1)
import pandas as pdimport numpy as np#创建一个以20170220为基准的以秒为单位的向前推进600个的时间序列rng = pd.date_range('20170220', periods=600, freq='s')print rng#以时间序列为索引的序列print pd.Series(np.random.randint(0, 500, len(rng)), index=rng)19.时间序列(2)
import pandas as pdimport numpy as nprng = pd.date_range('20170220', periods=600, freq='s')ts = pd.Series(np.random.randint(0, 500, len(rng)), index=rng)#重采样,以2分钟为单位进行加和采样print ts.resample('2Min', how='sum')#列出2011年1季度到2017年1季度rng1 = pd.period_range('2011Q1','2017Q1',freq='Q')print rng1#转换成时间戳形式print rng1.to_timestamp()#时间加减法print pd.Timestamp('20170220') - pd.Timestamp('20170112')print pd.Timestamp('20170220') + pd.Timedelta(days=12)
20.数据类别
import pandas as pdimport numpy as npdf = pd.DataFrame({"id":[1,2,3,4,5,6], "raw_grade":['a', 'b', 'b', 'a', 'a', 'e']})print df#添加类别数据,以raw_grade的值为类别基础df["grade"] = df["raw_grade"].astype("category")print df#打印类别print df["grade"].cat.categories#更改类别df["grade"].cat.categories = ["very good", "good", "very bad"]print df#根据grade的值排序print df.sort_values(by='grade', ascending=True)#根据grade排序显示数量print df.groupby("grade").size()21.数据可视化
import pandas as pdimport numpy as npimport matplotlib.pyplot as pltts = pd.Series(np.random.randn(1000), index=pd.date_range('20170220', periods=1000))ts = ts.cumsum()print tsts.plot()plt.show()22.数据读写
import pandas as pdimport numpy as npdf = pd.DataFrame(np.random.randn(10, 4), columns=list('ABCD'))#数据保存,相对路径df.to_csv('data.csv')#数据读取print pd.read_csv('data.csv', index_col=0)数据被保存到这个文件中:
打开看看:
是不是感觉很强大!
新闻热点
疑难解答