Python数据分析库pandas基本操作方法
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 np import pandas as pd s_data = pd.series([1,3,5,7,np.nan,9,11])#pandas中生产序列的函数,类似于我们平时说的数组 print s_data
2.pandas数据结构dataframe
import numpy as np import pandas as pd #以20170220为基点向后生产时间点 dates = pd.date_range('20170220',periods=6) #dataframe生成函数,行索引为时间点,列索引为abcd data = pd.dataframe(np.random.randn(6,4),index=dates,columns=list('abcd')) print data print print data.shape print print data.values
3.dataframe的一些操作(1)
import numpy as np import pandas as pd #设计一个字典 d_data = {'a':1,'b':pd.timestamp('20170220'),'c':range(4),'d':np.arange(4)} print d_data #使用字典生成一个dataframe df_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 np import pandas as pd dates = pd.date_range('20170220',periods=6) data = pd.dataframe(np.random.randn(6,4),index=dates,columns=list('abcd')) print data print #输出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 np import pandas as pd dates = pd.date_range('20170220',periods=6) data = pd.dataframe(np.random.randn(6,4),index=dates,columns=list('abcd')) print data print #转置 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 np import pandas as pd dates = 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 np import pandas as pd dates = 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] #拷贝data data2 = data.copy() print data2 tag = ['a'] * 2 + ['b'] * 2 + ['c'] * 2 #在data2中增加tag列用tag赋值 data2['tag'] = tag print data2 #打印tag列中为a,c的行 print data2[data2.tag.isin(['a','c'])]
8.dataframe的一些操作(6)
import numpy as np import pandas as pd dates = pd.date_range('20170220',periods=6) data = pd.dataframe(np.random.randn(6,4),index=dates,columns=list('abcd')) print data #将第一行第一列元素赋值为100 data.iat[0,0] = 100 print data #将a列元素用range(6)赋值 data.a = range(6) print data #将b列元素赋值为200 data.b = 200 print data #将3,4列元素赋值为1000 data.iloc[:,2:5] = 1000 print data
9.dataframe的一些操作(7)
import numpy as np import pandas as pd dates = 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行赋值为2 dfl.loc[dates[1:3],'e'] = 2 print dfl #去掉存在nan元素的行 print dfl.dropna() #将nan元素赋值为5 print dfl.fillna(5) #判断每个元素是否为nan print pd.isnull(dfl) #求列平均值 print dfl.mean() #对每列进行累加 print dfl.cumsum()
10.dataframe的一些操作(8)
import numpy as np import pandas as pd dates = pd.date_range('20170220',periods = 6) df = pd.dataframe(np.random.randn(6,4) , index = dates , columns = list('abcd')) print df dfl = 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 np import pandas as pd dates = 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 np import pandas as pd df = 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 == dfl
13.dataframe的一些操作(11)
import numpy as np import pandas as pd df = pd.dataframe(np.random.randn(10,4) , columns = list('abcd')) print df left = pd.dataframe({'key':['foo','foo'],'lval':[1,2]}) right = pd.dataframe({'key':['foo','foo'],'rval':[4,5]}) print left print 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 np import pandas as pd df = 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 df print #根据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 pd import numpy as np #zip函数可以打包成一个个tuple tuples = 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 index print df = pd.dataframe(np.random.randn(8, 2), index=index, columns=['a', 'b']) print df print #将列索引变成行索引 print df.stack()
16.dataframe的一些操作(14)
import pandas as pd import numpy as np tuples = 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 df print stacked = df.stack() print stacked #将行索引转换为列索引 print stacked.unstack() #转换两次 print stacked.unstack().unstack()
17.dataframe的一些操作(15)
import pandas as pd import numpy as np df = 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 pd import 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 pd import numpy as np rng = 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 pd import numpy as np df = 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 pd import numpy as np import matplotlib.pyplot as plt ts = pd.series(np.random.randn(1000), index=pd.date_range('20170220', periods=1000)) ts = ts.cumsum() print ts ts.plot() plt.show()
22.数据读写
import pandas as pd import numpy as np df = pd.dataframe(np.random.randn(10, 4), columns=list('abcd')) #数据保存,相对路径 df.to_csv('data.csv') #数据读取 print pd.read_csv('data.csv', index_col=0)
数据被保存到这个文件中:
打开看看:
以上这篇python数据分析库pandas基本操作方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
上一篇: CentOS 7安装配置图文教程
下一篇: python 2.7.14安装图文教程