index函数的使用方法python,Python中index的语法
各位老铁们,大家好,今天由我来为大家分享index函数的使用方法python,以及Python中index的语法的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!
index在python中的用法
如下:
1、index函数:用于从列表中找出某个值第一个匹配项的索引位置。
2、index方法语法:list.index(x[,start[,end]])。
3、参数:x--查找的对象。start--可选,查找的起始位置。end--可选,查找的结束位置。
4、返回值:该方法返回查找对象的索引位置,如果没有找到对象则抛出异常。
5、实例:
代码:str1="thisisstringexample....wow!!!";str2="exam"。
index函数为print(str1.index(str2))。
python中index函数怎么用?
Python中index方法检测字符串中是否包含子字符串 str,如果指定 beg(开始)和 end(结束)范围,则检查是否包含在指定范围内,该方法与 python find方法一样,只不过如果str不在string中会报一个异常。
index函数一般用处是在序列中检索参数并返回第一次出现的索引,没找到就会报错。
怎么用python进行数据
pandas是本书后续内容的首选库。pandas可以满足以下需求:
具备按轴自动或显式数据对齐功能的数据结构。这可以防止许多由于数据未对齐以及来自不同数据源(索引方式不同)的数据而导致的常见错误。.
集成时间序列功能
既能处理时间序列数据也能处理非时间序列数据的数据结构
数学运算和简约(比如对某个轴求和)可以根据不同的元数据(轴编号)执行
灵活处理缺失数据
合并及其他出现在常见数据库(例如基于SQL的)中的关系型运算
1、pandas数据结构介绍
两个数据结构:Series和DataFrame。Series是一种类似于以为NumPy数组的对象,它由一组数据(各种NumPy数据类型)和与之相关的一组数据标签(即索引)组成的。可以用index和values分别规定索引和值。如果不规定索引,会自动创建 0到 N-1索引。
#-*- encoding:utf-8-*-import numpy as npimport pandas as pdfrom pandas import Series,DataFrame#Series可以设置index,有点像字典,用index索引obj= Series([1,2,3],index=['a','b','c'])#print obj['a']#也就是说,可以用字典直接创建Seriesdic= dict(key= ['a','b','c'],value= [1,2,3])
dic= Series(dic)#下面注意可以利用一个字符串更新键值key1= ['a','b','c','d']#注意下面的语句可以将 Series对象中的值提取出来,不过要知道的字典是不能这么做提取的dic1= Series(obj,index= key1)#print dic#print dic1#isnull和 notnull是用来检测缺失数据#print pd.isnull(dic1)#Series很重要的功能就是按照键值自动对齐功能dic2= Series([10,20,30,40],index= ['a','b','c','e'])#print dic1+ dic2#name属性,可以起名字dic1.name='s1'dic1.index.name='key1'#Series的索引可以就地修改dic1.index= ['x','y','z','w']
DataFrame是一种表格型结构,含有一组有序的列,每一列可以是不同的数据类型。既有行索引,又有列索引,可以被看做由Series组成的字典(使用共同的索引)。跟其他类似的数据结构(比如R中的data.frame),DataFrame面向行和列的操作基本是平衡的。其实,DataFrame中的数据是以一个或者多个二维块存放的(不是列表、字典或者其他)。
#-*- encoding:utf-8-*-import numpy as npimport pandas as pdfrom pandas import Series,DataFrame#构建DataFrame可以直接传入等长的列表或Series组成的字典#不等长会产生错误data={'a':[1,2,3],'c':[4,5,6],'b':[7,8,9]
}#注意是按照列的名字进行列排序frame= DataFrame(data)#print frame#指定列之后就会按照指定的进行排序frame= DataFrame(data,columns=['a','c','b'])print frame#可以有空列,index是说行名frame1= DataFrame(data,columns= ['a','b','c','d'],index= ['one','two','three'])print frame1#用字典方式取列数据print frame['a']print frame.b#列数据的修改直接选出来重新赋值即可#行,可以用行名或者行数来进行选取print frame1.ix['two']#为列赋值,如果是Series,规定了index后可以精确赋值frame1['d']= Series([100,200,300],index= ['two','one','three'])print frame1#删除列用del函数del frame1['d']#警告:通过列名选出来的是Series的视图,并不是副本,可用Series copy方法得到副本
另一种常见的结构是嵌套字典,即字典的字典,这样的结构会默认为外键为列,内列为行。
#-*- encoding:utf-8-*-import numpy as npimport pandas as pdfrom pandas import Series,DataFrame#内层字典的键值会被合并、排序以形成最终的索引pop={'Nevada':{2001:2.4,2002:2.9},'Ohio':{2000:1.5,2001:1.7,2002:3.6}}
frame3= DataFrame(pop)#rint frame3#Dataframe也有行和列有name属性,DataFrame有value属性frame3.index.name='year'frame3.columns.name='state'print frame3print frame3.values
下面列出了DataFrame构造函数能够接受的各种数据。
索引对象
#-*- encoding:utf-8-*-import numpy as npimport pandas as pdfrom pandas import Series,DataFrame#pandas索引对象负责管理轴标签和其他元数据,构建Series和DataFrame时,所用到的任何数组或其他序列的标签都被转换为Indexobj= Series(range(3),index= ['a','b','c'])
index= obj.index#print index#索引对象是无法修改的,这非常重要,因为这样才会使得Index对象在多个数据结构之间安全共享index1= pd.Index(np.arange(3))
obj2= Series([1.5,-2.5,0],index= index1)print obj2.index is index1#除了长得像数组,Index的功能也类似一个固定大小的集合print'Ohio' in frame3.columnsprint 2003 in frame3.index
pandas中的Index是一个类,pandas中主要的Index对象(什么时候用到)。
下面是Index的方法与属性,值得注意的是:index并不是数组。
2、基本功能
下面介绍基本的Series和 DataFrame数据处理手段。首先是索引:
#-*- encoding:utf-8-*-import numpy as npimport pandas as pdimport matplotlib.pyplot as pltfrom pandas import Series,DataFrame#Series有一个reindex函数,可以将索引重排,以致元素顺序发生变化obj= Series([1,2,3,4],index=['a','b','c','d'])#注意这里的reindex并不改变obj的值,得到的是一个“副本”#fill_value显然是填充空的index的值#print obj.reindex(['a','c','d','b','e'],fill_value= 0)#print objobj2= Series(['red','blue'],index=[0,4])#method= ffill,意味着前向值填充obj3= obj2.reindex(range(6),method='ffill')#print obj3#DataFrame的reindex可以修改行、列或者两个都改frame= DataFrame(np.arange(9).reshape((3,3)),index= ['a','c','d'],columns= ['Ohio','Texas','California'])#只是传入一列数,是对行进行reindex,因为...frame的行参数叫index...(我这么猜的)frame2= frame.reindex(['a','b','c','d'])#print frame2#当传入原来没有的index是,当然返回的是空NaN#frame3= frame.reindex(['e'])#print frame3states= ['Texas','Utah','California']#这是对行、列重排#注意:这里的method是对index也就是行进行的填充,列是不能填充的(不管method的位置如何)frame4= frame.reindex(index= ['a','b','c','d'],columns=states,method='ffill')#print frame4#使用ix的标签索引功能,重新索引变得比较简洁print frame.ix[['a','d','c','b'],states]
丢弃指定轴上的项
#-*- encoding:utf-8-*-import numpy as npimport pandas as pdimport matplotlib.pyplot as pltfrom pandas import Series,DataFrame#drop函数可以丢弃轴上的列、行值obj= Series(np.arange(3.),index= ['a','b','c'])#原Series并不丢弃obj.drop('b')#print obj#注意下面,行可以随意丢弃,列需要加axis= 1print frame.drop(['a'])print frame.drop(['Ohio'],axis= 1)
下面说索引、选取和过滤
#-*- encoding:utf-8-*-import numpy as npimport pandas as pdimport matplotlib.pyplot as pltfrom pandas import Series,DataFrame
obj= Series([1,2,3,4],index=['a','b','c','d'])
frame= DataFrame(np.arange(9).reshape((3,3)),index= ['a','c','d'],columns= ['Ohio','Texas','California'])#Series切片和索引#print obj[obj< 2]#注意:利用标签的切片与python的切片不同,两端都是包含的(有道理)print obj['b':'c']#对于DataFrame,列可以直接用名称print frame['Ohio']#特殊情况:通过切片和bool型索引,得到的是行(有道理)print frame[:2]print frame[frame['Ohio']!= 0]#下面的方式是对frame所有元素都适用,不是行或者列,下面的得到的是numpy.ndarray类型的数据print frame[frame< 5],type(frame[frame< 5])
frame[frame< 5]= 0print frame#对于DataFrame上的标签索引,用ix进行print frame.ix[['a','d'],['Ohio','Texas']]print frame.ix[2]#注意这里默认取行#注意下面默认取行print frame.ix[frame.Ohio> 0]#注意下面的逗号后面是列标print frame.ix[frame.Ohio> 0,:2]
下面是常用的索引选项:
算术运算和数据对齐
#pandas有一个重要的功能就是能够根据索引自动对齐,其中索引不重合的部分值为NaNs1= Series([1,2,3],['a','b','c'])
s2= Series([4,5,6],['b','c','d'])#print s1+ s2df1= DataFrame(np.arange(12.).reshape(3,4),columns=list('abcd'))
df2= DataFrame(np.arange(20.).reshape(4,5),columns=list('abcde'))#print df1+ df2#使用add方法,并传入填充值,注意下面的fill_value函数是先对应填充再进行加和,而不是加和得到NaN之后再填充#print df1.add(df2,fill_value= 1000)#df1.reindex(columns= df2.columns,fill_value=0)
除了add之外,还有其他的方法:
DataFrame和Series之间的运算
#下面看一下DataFrame和Series之间的计算过程arr= DataFrame(np.arange(12.).reshape((3,4)),columns= list('abcd'))#下面的结果标明,就是按行分别相减即可,叫做 broadcasting#注意:默认情况下,DataFrame和Series的计算会将Series的索引匹配到DataFrame的列,然后进行计算,再沿着行一直向下广播#注意:下面的式子中,如果写arr- arr[0]是错的,因为只有标签索引函数ix后面加数字才表示行print arr- arr.ix[0]
Series2= Series(range(3),index= list('cdf'))#按照规则,在不匹配的列会形成NaN值print arr+ Series2#如果想匹配行且在列上广播,需要用到算术运算方法Series3= arr['d']#axis就是希望匹配的轴print arr.sub(Series3,axis= 0)
下面是函数应用和映射
#-*- encoding:utf-8-*-import numpy as npimport pandas as pdimport matplotlib.pyplot as pltfrom pandas import Series,DataFrame#NumPy的元素级数组方法也适用于pandas对象frame= DataFrame(np.random.randn(4,3),columns= list('abc'),index= ['Ut','Oh','Te','Or'])print frame#下面是求绝对值:#print np.abs(frame)#另一种常见的做法是:将一个函数应用到行或者列上,用apply方法,与R语言类似fun= lambda x:x.max()- x.min()#默认是应用在每一列上print frame.apply(fun)#下面是应用在列上print frame.apply(fun,axis= 1)#很多统计函数根本不用apply,直接调用方法就可以了print frame.sum()#除了标量值之外,apply函数后面还可以接返回多个值组成的的Series的函数,有没有很漂亮?def f(x): return Series([x.min(),x.max()],index= ['min','max'])#print frame.apply(f)#元素级的python函数也是可以用的,但是要使用applymap函数format= lambda x:'%.2f'% xprint frame.applymap(format)#之所以要用applymap是因为Series有一个应用于元素级函数的map方法??#这里的map很有用print frame['b'].map(format)
排序与排名
#-*- encoding:utf-8-*-import numpy as npimport pandas as pdimport matplotlib.pyplot as pltfrom pandas import Series,DataFrame#用sort_index函数对行、列的索引进行排序obj= Series(range(4),index= ['d','a','b','c'])print obj.sort_index()
frame= DataFrame(np.arange(8).reshape((2,4)),index= ['three','one'],columns= ['d','a','b','c'])#默认是对行“索引”进行排序,如果对列“索引”进行排序,axis= 1即可print frame.sort_index()print frame.sort_index(axis= 1)print frame.sort_index(axis= 1,ascending= False)#如果对值进行排序,用的是order函数,注意所有的缺失值会放到最后(如果有的话)print obj.order()#numpy中的sort也可以用来排序print np.sort(obj)#如果相对DataFrame的值进行排序,函数还是sort_index,只不过后面需要加一个参数byframe= DataFrame({'b':[4,7,-3,2],'a':[0,1,0,1]})print frame.sort_index(by= ['a','b'])#rank函数返回从小到大排序的下标,对于平级的数,rank是通过“为各组分配一个平均排名”的方式破坏评级关系#下标从1开始obj= Series([7,-5,7,4,2,0,4])print obj.rank()#而numpy中的argsort函数比较奇怪,返回的是把数据进行排序之后,按照值得顺序对应的下标,下标从0开始print np.argsort(obj)#打印结果为:1,5,4,3,6,0,2按照这个下标顺序恰好可以得到从小打到的值,见下面print obj[np.argsort(obj)]#rank函数中有一个method选项,用来规定下标的方式print obj.rank(method='first',ascending=False)print obj.rank(method='max',ascending=False)print obj.rank(method='min',ascending=False)#对于DataFrame,rank函数默认把每一列排好并返回坐标print frame.rank()print frame.rank(axis= 1)
带有重复值的轴索引
#-*- encoding:utf-8-*-import numpy as npimport pandas as pdimport matplotlib.pyplot as pltfrom pandas import Series,DataFrame#虽然pandas的很多函数(如reindex)要求标签唯一,但是并不具有强制性obj= Series(range(5),index= list('aabbc'))print obj#索引是否唯一用is_unique看是否唯一print obj.index.is_unique#对于重复值的索引,选取的话返回一个Series,唯一的索引返回一个标量print obj['a']#对于DataFrame也是如此df= DataFrame(np.random.randn(4,3),index= list('aabb'))print dfprint df.ix['b']#####自己导入数据的时候数据处理之前可以做一下index唯一性等,自己创建DataFrame注意不能这样
3、汇总和计算描述统计
#-*- encoding:utf-8-*-import numpy as npimport osimport pandas as pdfrom pandas import Series,DataFrameimport matplotlib.pyplot as pltimport time#pandas对象拥有一组常用的数学和统计方法,大部分属于简约统计,用于从Series中提取一个值,或者从DataFrame中提取一列或者一行Series#注意:与NumPy数组相比,这些函数都是基于没有缺失数据的建设构建的,也就是说:这些函数会自动忽略缺失值。df= DataFrame([[1.4,np.nan],[7.1,-4.5],[np.nan,np.nan],[0.75,-1.3]],index= list('abcd'),columns=['one','two'])print df.sum()print df.sum(axis= 1)#下面是一些函数,idxmin和 idmax返回的是达到最小或者最大的索引print df.idxmin()print df.idxmin(axis=1)#关于累积型的函数print df.cumsum()#describe函数,与R语言中的describe函数基本相同print df.describe()#对于非数值型的数据,看看下面的结果obj= Series(['c','a','a','b','d']* 4)print obj.describe()'''结果为:
count 20
unique 4
top a
freq 8
其中,freq是指字母出现的最高频率'''
#-*- encoding:utf-8-*-import numpy as npimport osimport pandas as pdfrom pandas import Series,DataFrameimport matplotlib.pyplot as pltimport time#下面看一下cummin函数#注意:这里的cummin函数是截止到目前为止的最小值,而不是加和以后的最小值frame= DataFrame([[1,2,3,4],[5,6,7,8],[-10,11,12,-13]],index= list('abc'),columns= ['one','two','three','four'])print frame.cummin()print frame
>>>
one two three four
a 1 2 3 4
b 1 2 3 4
c-10 2 3-13
one two three four
a 1 2 3 4
b 5 6 7 8
c-10 11 12-13
相关系数与协方差
有些汇总
python flask 怎么组织程序
1.初始化
所有的flask程序都必须创建一个程序实例
web服务器使用wsgi接口协议,把接收客户端的请求都转发给这个程序实例来进行处理。这个程序实例就是flask对象
from flask import Flask
app= Flask(__name__)
#__name__决定程序的根目录,以便以后能找到相对于程序根目录的资源文件位置
2.路由和视图函数
程序实例需要知道接收请求后,需要知道url请求应该运行哪些代码。所以保存了一个url和python函数的映射关系;这个映射关系就叫做路由
flask程序中路由的写法:
2.1#使用app.route装饰器,把修饰的函数注册为路由。例如
@app.route('/')def index(): return"<h1>Hello World</h1>"
#函数的名字不是必须写index的,只是和装饰器关联的时候写的函数名而已
#把index函数注册为程序根路径的处理程序。函数的返回值称为响应,是客户端接收的内容。
像index这样的函数称为试图函数,试图函数返回的响应可以是包含html的简单字符串,也可以是复杂的东西
2.2#可变url部分映射,使用特定的装饰器语法就可以
@app.route('/user/<name>')def user(name): return"<h1>hello%s</h1>"%(name)
装饰器中的<name>指定可变内容为name,name对user(name)函数中的传递参数,这2个部分内容必须一致
调用试图函数时候,flask会自动的将动态部分作为参数传入参数,这个函数中,参数用于生成个人的欢迎信息
#备注:路由中的动态部分默认使用字符串类型,可以使用int,float,path来定义;例如<int:id>;path类型也是字符串,但不把斜线视作分隔符,而将其当做动态片段的一部分
3.启动服务器
调用程序实例app的run方法启动flask集成开发的web服务器
if __name__=="__main__":
app.run(debug=True)
debug=True代表的是调试模式,这个flask自带的run方法开启的服务器不适合在生产中使用,此处只用来测试
4.一个完整的Flask程序
啥也不说,先上例子hello.py
from flask import Flask
app= Flask(__name__)
@app.route('/')def index(): return'<h1>HelloWorld</h1>'@app.route('/user/<name>')def user(name): return"<h1>hello%s</h1>"%nameif __name__=="__main__":
app.run(debug=True)
默认会开启服务器本机5000端口;127.0.0.1:5000
执行脚本python hello.py
浏览器测试
5.请求上下文
Flask使用请求上下文,临时把某些对象变为全局可用;例如
from flask import request
@app.route('/')def index():
user_agent= request.headers.get('User-Agent') return'<h1>your browser is%s</h1>'%(user_agent)
在这个视图函数中,我们把request当做全局变量使用,flask使用请求上下文让特定的变量在一个线程中全局可访问。于此同时却不会干扰其他线程
session:请求上下文;用户会话,用于存储请求之间需要“记住”的值的词典
激活请求上下文的后就可以使用request和session变量了
6.程序上下文
current_app:程序上下文;当前激活程序的程序实例
g:程序上下文;处理请求时用作临时存储的对象
7.请求映射关系表
接收请求,处理请求,,,之间有个映射表,要不然不知道该去执行什么代码。URL映射
from hello import appprint app.url_map
Map([<Rule'/'(HEAD, OPTIONS, GET)-> index>,
<Rule'/static/<filename>'(HEAD, OPTIONS, GET)-> static>,
<Rule'/user/<name>'(HEAD, OPTIONS, GET)-> user>])
8.请求钩子
有的时候在处理请求之前和之后,执行某些特定的代码是很有用的,这就用到了请求钩子
例如在请求之前创建数据库连接或者redis连接;或者是系统里面用户请求处理之前先验证用户的身份,是否激活,激活执行什么操作,没激活用户一直绑到固定页面去直到激活
为了避免每个试图函数中都使用重复的代码,flask提供了注册通用函数的功能;
也就是说只要写一个请求钩子-函数,整个程序实例全局都被应用了。
例如:在所有请求之前先验证下用户的认证状态
@before_app_requestdef before_request(): if current_user.is_authenticated:
current_user.ping() if not current_user.confirmed and request.endpoint[:5]!='auth.' and request.endpoint!='static': return redirect(url_for('auth.unconfirmed'))
常见的4种钩子:
before_first_request:注册一个函数,在处理第一个请求之前运行
before_request:注册一个函数,每次请求之前运行
after_request:注册一个函数,没有未处理的异常抛出,每次请求之后运行
teardown_request:注册一个函数,有未处理的异常抛出,每次请求之后运行
在请求钩子和视图函数之间共享数据一般使用程序上下文g;
例如before_request处理程序可以从数据库中加载已登录用户,将其保存到g.user中,随后调用试图函数,试图函数再从g.user中获取用户
9.基于Flask的http响应
flask调用试图函数处理请求,并把返回值作为响应的内容.大多情况下是一个简单的字符串或者json字符串;返回字符串常用于给对方提供接口的时候使用
http响应中很重要的一个内容是状态码,flask默认设置为200,这个代码表明请求已经被成功处理了
如果试图函数返回的响应需要不同的状态码,可以把状态码加到后面返回
例如
@app.route('/')def index(): return'<h1>Bad Request</h1>',400
试图函数返回的响应还可以接受第三个参数,第三个参数是一个字典类型的首部,可以添加到http响应中去,一般不用添加
如果不想返回这种好多个元素的元祖,可以使用Response对象来标准化下返回。
例如:创建一个响应对象,然后设置cookie
from flask import make_response
@app.route('/')def index():
response= make_response('<h1>This document carries a cookie!</h1>')
response.set_cookie('answer',42) return response
还有一种特殊的响应类型,flask提供了一种基于302的跳转响应,这个响应由redirect函数来提供。指向的地址由Location首部提供,重定向的响应可以使用3个值形式的返回值生成。也可以再Response对象中设定
例如:
from flask import redirect
@app.route('/')def index(): return redirect('htmple.com')
还有一种特殊的响应类型,flask提供了一种错误响应。这个由abort函数来提供。abort抛出404异常,抛出异常后把控制权移交给web服务器
例如:
from flask import abort
@app.route('/user/<id>')def get_user(id):
user= load_user(id) if not user:
abort(404) return'<h1>Hello,%s</h1>'%(user.name)
10.flask的扩展flask-script
这个例子主要是讲如何把flask扩展添加到程序中,并使用
例如下面你的例子是添加flask-script扩展,使用命令行参数增强程序的功能
使用命令行方式启动web服务器,而不是修改文件,给run方法传递参数
安装扩展
pip install flask-script
使用flask-script扩展,并把hello.py文件改为命令行参数启动的形式#添加的扩展默认会安装到flask.ext命名空间中
from flask import Flaskfrom flask.ext.script import Manager
app= Flask(__name__)
manager= Manager(app)
@app.route('/')def index(): return'<h1>HelloWorld</h1>'@app.route('/user/<name>')def user(name): return"<h1>hello%s</h1>"%nameif __name__=="__main__":
manager.run()
flask-script扩展中添加了一个Manager的类,以上例子中,这个扩展初始化的方法是,把程序实例作为参数传递给构造函数来初始化主类的实例。后续其他flask扩展也基本是这个套路
这样修改之后,程序就可以使用一组基本的命令行选项来启动和调试了
python hello.py shell#在flask应用上下文环境中运行python shell,方便测试和调试web环境
python hello.py runserver#运行flask开发服务器,app.run()
python hello.py-h#显示帮助信息
python hello.py runserver--help
usage: hello.py runserver [-h] [-t HOST] [-p PORT] [--threaded]
[--processes PROCESSES] [--passthrough-errors] [-d]
[-r]
python hello.py runserver-h 0.0.0.0-p 80#这样就开启了本机的80端口,别的机器可以远程访问了
好了,文章到这里就结束啦,如果本次分享的index函数的使用方法python和Python中index的语法问题对您有所帮助,还望关注下本站哦!