Python 数据处理(二十九)—— MultiIndex 高级索引操作 admin 2023-09-08 14:42:01 篇首语:本文由小编为大家整理,主要介绍了Python 数据处理(二十九)—— MultiIndex 高级索引操作相关的知识,希望对你有一定的参考价值。 参考技术A 从语法上将 MultiIndex 与 .loc 集成在高级索引中是有些挑战性。通常, MultiIndex 的键采用元组的形式。例如 注意 : 虽然也可以使用 df.loc["bar", "two"] ,但这种简写的符号通常会导致歧义 如果你还想用 .loc 索引某一列,你必须像这样使用一个元组 想要获取第一个级别的某一标签的所有元素,并不需要传递元组,例如 而不是使用 df.loc[("bar",),] (等价于 df.loc["bar",] ) 当然,也可以进行切片 通过提供一个元组切片,选择范围内的值 传递一个标签或元组列表的工作原理类似于 reindex 需要注意的是,在 pandas 中,当涉及到索引时,元组和列表的处理方式并不相同。 元组被解释为一个多级键,而列表则用来指定多个键。或者换句话说,元组是横向的,列表是纵向的 您可以通过提供多个索引器来对 MultiIndex 进行切片 可以使用 slice(None) 选择该级别的所有内容,没有指定索引的级别默认为 slice(None) 通常,切片的两段都会包括在内,因为这是标签索引 在使用 .loc 的时候,最好同时指定索引(行)和标签(列),因为在某些情况下,传递的索引可能会被解析为两个轴而不是 MultiIndex 你应该使用 而不是 例如 使用切片,列表和标签的基本 MultiIndex 切片操作 你可以使用 pandas.IndexSlice 来让 : 语法显得更自然一些,而不是使用 slice(None) 可以使用这种方法在多个轴同时进行相当复杂的选择 您可以使用布尔索引器来进行与值相关的选择 您还可以为 .loc 指定 axis 参数,以在某一个轴上传递切片 此外,您可以使用以下方法设置这些值 也可以在等号右边使用可对齐对象 DataFrame 的 xs() 方法还接受一个 level 参数,以便更容易在 MultiIndex 的特定级别上选择数据 使用切片 您还可以为 xs 提供 axis 参数来选择列 使用切片 xs 还允许使用多个键进行选择 使用切片 您可以将 drop_level=False 传递给 xs ,以保留所选择的级别 使用 drop_level=True (默认值)与上面的结果比较 在 pandas 对象的 reindex() 和 align() 方法中使用 level 参数,可以在一个级别上广播值 swaplevel() 方法可以切换两个级别的顺序 reorder_levels() 方法是 swaplevel 方法的推广,允许你在一个步骤中排列分层索引级别 rename() 方法可用于重命名 MultiIndex 的标签,通常用于重命名 DataFrame 的列 rename 的 columns 参数允许指定需要重命名的列的字典 这个方法也可以用来重命名 DataFrame 主索引的特定标签 rename_axis() 方法用于重命名 Index 或 MultiIndex 的名称。 特别地,可以指定 MultiIndex 的级别名称,可以使用 reset_index() 将 MultiIndex 移动到列 注意 : DataFrame 的列是一个索引,因此使用 rename_axis 和 columns 参数可以改变该索引的名称 rename 和 rename_axis 都支持指定字典、 Series 或映射函数来将标签/名称映射到新值 当直接使用 Index 对象而不是通过 DataFrame 工作时,可以使用 Index.set_names() 来更改名称 您不能通过 level 设置 MultiIndex 的名称 使用 Index.set_names() 替代 python学习(二十九)类方法连接数据库及面向对象编程1、类方法连接数据库先说一下析构函数 def __del__(self): pass析构函数,在实例被销毁的时候执行,那么对于连接数据库,在实例执行后,需要关闭游标和数据库连接,这两个操作就可以放到析构函数里面import pymysqlclass Mydb(object): def __del__(self): #析构函数,实例被销毁的时候执行的 self.cur.close() self.coon.close() print("over") def __init__(self,host,user,passwd,db, port=3306,charset="utf8"): try: self.coon=pymysql.connect( host=host,user=user,passwd=passwd,port=port, charset=charset,db=db,autocommit=True ) #autocommit 自动提交,写语句的时候自动提交 except Exception as e: print("数据库连接失败!%s"%e) else: self.cur=self.coon.cursor(cursor=pymysql.cursors.DictCursor) def exsql(self,sql): try: self.cur.execute(sql) except Exception as e: print("sql语句有问题,%s"%sql) else: self.res=self.cur.fetchall() return self.resmy=Mydb("xxx","jxz","123456","jxz")my.exsql("select * from stu;")print("我是最后一行代码")在构造函数里,进行数据库连接,并做异常处理,在执行sql语句函数中进行sql语句执行,析构函数中操作关闭游标和数据库连接。在连接数据库的时候,有一个新的知识点:autocommit=True 自动提交,这个在以前写的数据库连接使用中并未提到,代替了之前需要判断是否是select语句,是否需要提交。2、if __name__=="__main__"用法if __name__=="__main__":一般在做测试或者调试的时候用如果是直接运行这个python文件,这句话就没有什么用处正常在python文件中导入其他python文件,且该python文件会正常执行但是如果导入的python文件里有 if __name__=="__main__": 这个执行结果,那么导入的这个python文件就不会执行3、类变量,实例变量及实例方法1)概念类变量: 公共的变量,每个实例都可以用实例变量:成员变量实例方法:实例化后才能用2)selfself代表的是本类对象,因为函数里面的变量都是局部变量,出了函数就不能用了,用self给对象绑定了之后,就可以self.xx随便用了self与实例对象的内存地址是一样的class Baby(): def __init__(self,name): print("self的内存地址",id(self))dcg=Baby("测试")print("测试的内存地址",id(dcg))输出结果为:self的内存地址 801098625712测试的内存地址 8010986257123)类变量,实例变量及实例方法使用class Baby(): country ="China" #类变量,公共的变量,每个实例都可以用 def my(self): self.name="liujia"abc=Baby() print(abc.country) #使用类变量的值Baby.country="USA" #类变量可以直接通过类名.xxx来进行修改yjt=Baby()print(yjt.country) #类变量已经修改为USAdcg=Baby()dcg.country="Japan" #实例变量print(dcg.country) 看以上这段代码,country变量是类下面,但没有在其他函数里面,是类变量,每个实例都可以用;my()函数是一个实例方法,在实例化后才能使用;先看实例化为abc后,打印country,那么使用的是类变量,输出为China;然后类变量进行了修改,这时候实例化为yjt,输出的country就是USA,最后实例化为dcg,这个实例修改了country的值,最后输出的country就是Japan。4)装饰器 4、类方法,静态方法1)概念类方法:不用实例化就可以直接调用可以通过cls使用类变量不能调用实例方法不想实例化的时候,可以定义成类方法静态方法:一个普通函数,只是写在类里面,用不了类变量,类方法,实例变量和实例方法2)类方法class Baby(): country ="China" #类变量,公共的变量,每个实例都可以用 @classmethod def xm(cls):#cls代表的就是Baby,类方法 print(cls.country) print("我是类方法")类方法可以不用实例化,直接调用Baby.xm() #不实例化,直接类名调用xm这个方法输出结果为:China我是类方法当然也可以先实例化,再调用dcg=Baby()dcg.xm() #实例化后,在通过实例化后的对象调用xm方法输出也是一样的还有一点是,类方法里面不能调用实例变量和实例方法,比如class Baby(): country ="China" #类变量,公共的变量,每个实例都可以用 def my(self): self.name="liujia" def cry(self): print("hhh") @classmethod def xm(cls):#cls代表的就是Baby,类方法 print(cls.country) print("我是类方法") cls.name #调用不了实例变量 cls.cry()#调用不了实例方法Baby.xm() 不管是cls.name,还是cls.cry(),但是会运行报错的3)静态方法class Baby(): @staticmethod #静态方法 def xh(): print("这是静态方法,它和一个没写在类里面的函数一样")可以注意到这个类里面的函数是没有self这个本类对象的,它就是一个普通的函数,但是也还是需要实例化后才能调用并且调用实例变量,实例方法等都是不可以的class Baby(): country ="China" #类变量,公共的变量,每个实例都可以用 def my(self): self.name="liujia" def cry(self): print("hhh") @staticmethod #静态方法 def xh(): print("这是静态方法,它和一个没写在类里面的函数一样") self.name self.cry()self.name和self.cry()但是会报错的 以上是关于Python 数据处理(二十九)—— MultiIndex 高级索引操作的主要内容,如果未能解决你的问题,请参考以下文章 Android NDK- ndk-stack 还原堆栈信息 如何打开pdb文件? 您可能还会对下面的文章感兴趣: 相关文章 浏览器打不开网址提示“ERR_CONNECTION_TIMED_OUT”错误代码的解决方法 如何安装ocx控件 VMware的虚拟机为啥ip地址老是自动变化 vbyone和EDP区别 linux/debian到底怎么重启和关机 苹果平板键盘被弄到上方去了,如何调回正常? 机器学习常用距离度量 如何查看kindle型号