#查找index函数的帮助 help(str.index) #for循环和break语句 from math import sqrt for i in range(2,101): flag=1 k=int(sqrt(i)) for j in range(2,k 1): if i%j==0: flag=0 break if(flag): print i #continue语句,满足条件跳出continue后面的语句 sumA=0 i=1 while i<=5: sumA =i i =1 if i==3: continue print 'i=%d,sum=%d'%(i,sumA) #循环中的else语句 k=5 for i in range(1,10): if k==3: break else: print i #自定义函数/素材1-100间素数 from math import sqrt def isprime(x): if x==1: return False k=int(sqrt(x)) for j in range(2,k 1): if x%j==0: return False return True for i in range(2,101): if isprime(i): print i
def f(x,y=True): #默认参数要放在参数列表的最后 'x and y both correct words or not' if y: print x,'and y both correct' print x,'is Ok' f(68) f(68,False) #传递函数 def addme2me(x): return(x x) def self(f,y): print f(y) self(addme2me,2.2) #lambda函数 my_add=lambda x,y:x y my_add(5,6)
#数据获取与表示 f=open(r'E:\360Downloads\firstpro.txt','w') #新建一个文件 f.write('hello,world') #f为对象,write写入文件 f.close()
f=open(r'E:\360Downloads\firstpro.txt','r') #r代表读出 p1=f.read(5) #5代表读出的字节数 p2=f.read() print p1,p2 f.close
f1=open(r'E:\360Downloads\companies.txt') cname=f1.readlines() for i in range(0,len(cname)): cname[i]=str(i 1) '' cname[i] f1.close f2=open(r'E:\360Downloads\scompanies.txt','w') f2.writelines(cname) f2.close()
#网络数据获取 import urllib r=urllib.urlopen('http:///') html=r.read
#序列 #标准类型运算符 'apple'<'banana' [1,2,3]!=[4,5,6]#值比较 atuple=('ba',126.4) btuple=atuple btuple is not atuple#对象身份比较 ('86.40'<'122.64') and ('apple'<'banana')#布尔运算 #序列类型运算符 week=['mondy','tuesday','wednesday','thursday','firday','satuday','sunday'] print week[1],week[-2],'\n',week[1:4],'\n',week[:6],'\n',week[::-1]#序列值的序号是从0开始到N-1或者从-1到N 'apple'*3 'ba' in ('ba','the boeingcompany') #序列类型转换工厂函数 list('hello,world')#将字符串转成列表 tuple('hello,world')#将字符串转成元组
#字符串 s1='''hello 'a' ''b'' world!''' s1 #三引号可以保持里面字符串的原貌
s2=r'd:\python\a.py' s2
ccode=['axp','ba','cat','csco','cvx'] cprice=['86.40','122.64','99.44','23.78','115.91'] for i in range(5): print '%d%8s:%8s' %(i,ccode[i],cprice[i]) #%8s指的占8个字符 print 'i get %d%%!' %32 #两个%%会留下一个
astr='what do you think of this saying 'no pain,no gain'?' tempstr=astr.split('\'')[1] #\'为转义字符 if tempstr.istitle(): print 'it is title format' else: print 'it is not title format' print tempstr.title()
astr='\101\t\x41\n'#\八进制数000代表的字符 \t代表横向制表符 print astr
#列表 jscores=[9,9,8.5,10,7,8,8,9,8,10] ascore=9 jscores.sort() jscores.pop() #去掉最高分 jscores.pop(0) #去掉最低分 jscores.append(ascore) #合并 avescore=sum(jscores)/len(jscores) print avescore
week=['monday','tuesday','wednesday','thursday','firday'] weekend=['saturday','sunday'] week.extend(weekend)#extend合并函数 for i,j in enumerate(week):#enumerate函数 产生从0开始的序列 print i 1,j
numlist=[3,11,5,8,16,1] numlist.sort(reverse=True) #按逆序排列 numlist fruitlist=['apple','banana','pear','lemon','avocado'] fruitlist.sort(key=len) fruitlist #按字符长度排序 #列表解析 [x**2 for x in range(10)] [x**2 for x in range(10) if x**2<50] [(x 1,y 1) for x in range(2) for y in range(2)]
#元组 atruple=(1,2,3) atruple atruple[1:] len(atruple) btruple=(['monday',1],2,3) btruple[0][1] 2014, #创建元组2014 alist=['axp','ba','cat'] atruple=('axp','ba','cat') alist[1]='alibaba' atruple[1]='alibaba'#元组是不可变的,列表是可变的 alist=[3,5,2,4] alist.sort() #改变原来列表 alist alist=[3,5,2,4] sorted(alist) #sorted只是新生成一个列表的副本,原来的列表并没有改变 alist #但元组就只能使用sorted,不能用sort,因为不能改变元组 atruple=(3,5,2,4) atruple.sort #会报错
def func(args1,args2='world'):#元组作为函数形式的参数 print args1,args2 func('hello',) func(args2='apple',args1='hello') def func(args1,*args): print args1 print args func('hello,','wangdachui','liuyuan','linlin') #返回值类型为元组的函数enumerate()、coerce()
#字典 ainfo={'wangdachui':3000,'niuyun':2000,'linlin':3000} #直接创建字典 info=[('wangdachui',3000),('niuyun',2000),('linlin',3000)] binfo=dict(info) #利用dict函数创建字典 cinfo=dict([['wangdachui',3000],['niuyun',2000],['linlin',3000]]) dinfo=dict(wangdachui=3000,niuyun=2000,linlin=3000)
adict={}.fromkeys(('wangdachui','niuyun','linlin'),3000) #fromkeys函数将所有的keys初始值设置为3000 adict
plist=[('axp','american express','86.40'),('ba','the boeing company','122.64'),('cat','caterpillar inc.','99.44')] alist[] blist[] for i in range(2): astr=plist[i][0] bstr=plist[i][2] alist.append(astr) blist.append(bstr) adict=dict(zip(alist,blist)) #zip函数 #字典的使用 #字典的基本操作 ainfo={'wangdachui':3000,'niuyun':2000,'linglin':4500,'tianqi':8000} ainfo['niuyun'] #键值查找 ainfo['niuyun']=9999#更新 ainfo ainfo['funyun']=1000#查找 'mayun' in ainfo #成员判断 del ainfo #删除字典
ainfo={'wangdachui':3000,'niuyun':2000,'linglin':4500,'tianqi':8000} for key in ainfo.keys(): print 'name=%s,salary=%s' %(key,ainfo[key]) 'niuyun's salary is %(niuyun)s.' %ainfo #%(key) 格式说明符 %字典对象名 ainfo={'wangdachui':3000,'niuyun':2000,'linglin':4500,'tianqi':8000} ainfo.keys() ainfo.values()
ainfo={'wangdachui':3000,'niuyun':2000,'linglin':4500,'tianqi':8000} binfo={'wangdachui':3000,'niuyun':9999,'linglin':4500,'wangzi':8000} ainfo.update(binfo)#update函数 快速更改 ainfo
astock={'axp':86.4,'ba':122.64} bstock=astock astock={} #此时只会讲astock清空,不会将bstock清空,需要用clear函数才会将关联的都删除 bstock astock.clear() bstock #字典作为函数的形式参数 def func(args1,*argst,**argsd): #一个*是可变长位置参数,**可变长关键字参数 print args1 print argst print argsd
func('hello','wangdachui','niuyun','linglin',a1=1,a2=2,a3=3)
#集合 names=['wangdachui','niuyun','wangzi','wangdachui','lingling','niuyun'] namesset=set(names) #set删除重复对象,因为集合的元素都不重复 namesset aset=set('hello') aset fset=frozenset('hello') fset #集合比较 aset=set('sunrise') bset=set('sunset') 'u' in aset aset==bset set('sun')<aset
aset&bset #集合关系运算 aset|bset aset-bset aset^bset #不能同时属于两个集合 aset-=set('sun') #运算符可复合 #集合内建函数 aset=set('sunrise') bset=set('sunset') aset.issubset(bset) #是否为子集 aset.intersection(bset) #交集 aset.difference(bset)#差补 cset=aset.copy() #拷贝 #面向可变集合的函数 aset=set('sunrise') aset.add('!') aset aset.update('yeah') aset.remove('!') aset.clear() #扩展库scipy import numpy as np xarray=np.ones((3,4)) #生产3*4的全部为1的矩阵 xarry
from scipy import linalg arr=np.array([[1,2],[3,4]]) linalg.det(arr)
#ndarry from numpy import * aarray=array([1,2,3]) aarray barray=array([(1,2,3),(4,5,6)]) barray zeros((2,2)) arange(1,5,0.5)
aarray=array([(1,2,3),(4,5,6)]) sin(aarray) aarray.shape #数组的维度 barray=aarray.reshape(3,2) barray aarray.sum() aarray.sum(axis=0) #通过设置参数,分别行、列求和 aarray.sum(axis=1) carray=array([1,3,5]) carray[:1] #切片功能 darray=array([2,4,6]) earray=array([7,8,9]) where(carray>2,darray,earray) #where函数
def fun(x,y): return (x 1)*(y 1) arr=fromfunction(fun,(9,9)) #fromfunction函数 arr #ufunc函数能对数组中每个元素进行操作,包括add等函数 import numpy as np a=np.arange(1,5) b=np.arange(2,6) np.add(a,b) np.add.accumulate([2,3,8]) np.multiply.accumulate([2,3,8])
#series #series 类似于一维数组的对象,由数据和索引组成 from pandas import Series import pandas as pd aser=pd.Series([1,2.0,'a']) bser=pd.Series(['apple','peach','lemon'],index=[1,2,3]) bser.index bser.values aser['a'] import numpy as np np.exp(aser) #series数据对齐 data={'axp':'86','csco':'122','ba':'94'} sindex=['axp','csco','aapl'] aser=pd.Series(data,index=sindex) aser pd.isnull(aser) #series的name属性 aser.name='cnames' aser.index.name='volume' aser
#dataframe表结构 #大致可以看成共享一个index的series的集合 data={'name':['wangdachui','linlin','niuyun'],'pay':[4000,5000,6000]} frame=pd.DataFrame(data) frame['name'] frame.pay frame.ix[2] #索引所对应的数据 #dataframe对象的修改和删除 frame['name']='admin' #对name下的所有元素进行更改 del frame['pay'] frame frame.index.name='no' #便捷数据获取 #便捷网络数据 雅虎财经 from matplotlib.finance import quotes_historical_yahoo from datetime import date import pandas as pd today=date.today() start=(today.year-1,today.month,today.day) quotes=quotes_historical_yahoo('AXP',start,today) df=pd.DataFrame(quotes) print df #自然语言工具包NLTK from nltk.corpus import gutenberg import nltk print gutenberg.fileids()
#数据准备 from matplotlib.finance import quotes_historical_yahoo from datetime import date import pandas as pd today=date.today() start=(today.year-1,today.month,today.day) quotes=quotes_historical_yahoo('AXP',start,today) fields=['date','open','close','high','low','volume'] quotesdf=pd.DataFrame(quotes,columns=fields) #通过columns数据加属性名 quotesdf=pd.DataFrame(quotes,index=range(1,len(quotes) 1,columns=fields) print quotesdf
from datetime import date from datetime import datetime y=datetime.strftime(x,'%Y-%m-%d') #将日期转换成固定格式 import pandas as pd dates=pd.date_range('20141001',periods=7) #自己创建时间序列 dates #数据显示 djidf.index djidf.columns djidf.values djidf.describe#显示数据描述 djidf.head(5)#显示前五行数据 djidf.tail(5) #数据选择 quotesdf[u'2013-12-02':u'2013-12-06'] #dataframe可以使用索引选择 djidf['code'] djidf.loc[1:5,] #通过loc通过标签选择数据,第一个参数是行标签,第二个参数是列标签 djidf.loc[:,['code','lasttrade']] #前面这个:需要 djidf.loc[1:6,[0,2]] #通过的行位置,列位置选择标签 quotesdf[quotesdf.index>=u'2014-01-01'] quotesdf[(quotesdf.index>=u'2014-01-01')&(quotesdf.close>=95)]#条件筛选 #简单统计预处理 djidf.mean(columns='lasttrade')#最近一次成交价的平均值 djidf[djidf.lasttrade>=120].name#最近一次成交价大于等于120的公司名 len(quotesdf[quotesdf.close>quotesdf.open]) #股票涨的天数 len(quotesdf)-131 status=np.sign(np.diff(quotesdf.close)) #np.diff相邻两天数据的差 status[np.where(status==1.)].size djidf.sort(columns='lasttrade')[27:].name#排序结果列出前三甲的公司名 ,一共是30条记录,所以是[27:] t=quotesdf[(quotesdf.index>=u'2014-01-01')&(quotesdf.index<=u'2014-02-01')] len(t) #统计2014年1月份的股票开盘天数
#分组 tempdf.groupby('month').count().month #每个月的股票开盘天数 tempdf.groupby('month').sum().volume #每个月的股票总成交量 g=tempdf.groupby('month') gvolume=g['volume'] print gvolume.sum() #合并 #append追加 纵向 p=quotesdf[:2] q=quotesdf[u'2014-01-01':u'2014-01-05'] p.append(q) #concat连接 pieces=[tempdf[:5],tempdf[len(tempdf)-4:]] pd.concat(pieces) #两个不同逻辑结构的对象能否连接 纵向 piece1=quotesdf[:3] piece2=tempdf[:3] pd.concat([piece1,piece2],ignore_index=True) #join连接 横向 pd.merge(djidf,akdf,on='code') pd.merge.(djidf,akdf,on='code').drop(['lasttrade'],axis=1) #聚类分析 from pylab import * from scipy.cluster.vq import * list1=[88,74,96,85] list2=[92,99,95,94] list3=[91,87,99,95] list4=[78,99,97,81] list5=[88,78,98,84] list6=[100,95,100,92] data=vstack((list1,list2,list3,list4,list5,list6)) centroids,_=kmeans(data,2) result,_=vq(data,centroids) print result
|