pandas 学习笔记04 基础操作01 索引的操作

1.索引操作(df.index与df.columns相同)

1.1建立索引

import pandas as pd]
#df = pd.read_excel(r'D:\work01\pandas\app\data\team.xlsx',index_col='name') #加载的同时将name列设置成索引
#加载时未指定索引,可以用df.set_index()
df = pd.read_excel(r'D:\work01\pandas\app\data\team.xlsx')
#df.set_index('name') #设置索引
# df.set_index(['name','team']) #设置两层索引
#df.set_index([df.name.str[0],'name']) #将姓名的第一个字母和姓名设置为索引

#覆盖式设置索引
# df = df.set_index('name') #建立索引并覆盖df
# df.set_index('name',inplace=Ture) #同上

#将一个Series指定为索引
#s = pd.Series([i for i in range(100)])
# df.set_index(s)
# df.set_index([s,'name']) #同时指定索引和现有字段
#df.set_index([s,s**2]) #计算索引

#df.set_index('name',drop = False) #保留原列
df.set_index('name',append=True) #保留原索引

1.2重置索引,与df.set_index()作用相反

#df.reset_index()#清除索引
#df.set_index('name').reset_index() #相当于什么也没做
#删除原索引,name列没有了
# df.set_index('name').reset_index(drop=True) 
# df.reset_index(inplace=True)

1.3索引类型(略)

1.4索引对象(行和列在panda里其实是一个index对象,可以传入构建数据和读取数据)

pd.Index([1,2,3]) #Int64Index([1, 2, 3], dtype='int64')
pd.Index(list('abc')) #Index(['a', 'b', 'c'], dtype='object')
pd.Index(['e','d','a','b'],name='somthing') #Index(['e', 'd', 'a', 'b'], dtype='object', name='somthing')

#查看对象
df.index #RangeIndex(start=0, stop=100, step=1)
df.columns #Index(['index', 'name', 'team', 'Q1', 'Q2', 'Q3', 'Q4'], dtype='object')

1.5索引的属性

#常用属性
df.index.name #名称
df.index.array #array数组
df.index.dtype #数据类型
df.index.shape #形状
df.index.size #元素数量
df.index.values #数组
#不常用
df.index.empty #是否为空
df.index.is_unique #是否不重复
df.index.names #名称列表
#df.index.is_all_dates #是否全是日期时间
#df.index.inferred_type
df.index.has_duplicates #是否有重复值

1.6索引的操作

#常用方法
df.index.astype('int64') #转换类型
# df.index.isin() #是否存在  
df.index.rename('number') #修改索引名称
df.index.nunique()#不重复值得数量
#df.index.sort_values(ascending=False) #排序,倒序
#df.index.map(lambda x:x+'_') #map函数处理  不能单独执行
#df.index.str.replace('_','') # str替换
#df.index.str.split('_') #分割
df.index.to_list() #转换成列表
df.index.to_frame(index=False,name='a') #DataFrame
df.index.to_series() #转换成Series
df.index.to_numpy() #转为numpy
df.index.unique() #去重
df.index.value_counts()#去重及计数
df.index.where(df.index=='a') #筛选
df.index.rename('grade',inplace=False) #重命名索引列
#df.index.rename(['species','yeae']) #多层,重名名索引列
df.index.max() #最大值
df.index.argmax()#最大索引值
df.index.any()
df.index.all()
df.index.T #转置,在多层索引里很有用
其他,不常用,但比较重要的方法
df.index.append(pd.Index([4,5])) #追加
df.index.repeat(2) #重复几次
df.index.inferred_type #推测数据类型
df.index.hasnans #是否有空值
df.index.is_monotonic_decreasing #是否单调递减
df.index.is_monotonic #是否有单调性
df.index.is_monotonic_increasing #是否单调递增
df.index.nbytes #基础数据中的字节数
df.index.ndim # 维度数,维度
df.index.nlevels #索引层级数,通常为1
df.index.min() #最小值
df.index.argmin()#最小索引值
df.index.argsort() #顺序值组成的数组
df.index.asof(2) #返回最近的索引
#索引类型转换
df.index.astype('int64',copy=True) #深拷贝
#df.index.copy(name='new',deep=True,dtype='int64') #拷贝
df.index.delete(1) #删除指定位置
df.index.difference(pd.Index([1,2,4]),sort=False) #对比不同
df.index.drop('a',errors='ignore') #删除
df.index.drop_duplicates(keep='first') #去重值
#df.index.droplevel(0) #删除层级
df.index.dropna(how='all') #删除空值
df.index.duplicated(keep='first') #重复值在结果数组中为True
df.index.equals(df.index) #与另一个索引对象是否相同
df.index.fillna(0,{0:'nan'}) #填充空值
df.index.format(name=True,formatter=lambda x:x+10) #字符列表,把name值加在第一位,每个值加10
df.index.get_indexer([2,9]) #返回一个array,指定值的索引位数组,不在的为-1
df.index.get_level_values(0) #获取指定层级Index对象
#指定索引列的位置
#df.index.get_loc('b')
df.index.insert(2,'f')#在索引位2 插入f
df.index.intersection(df.index) #交集
df.index.is_(df.index) #;类似is检查
df.index.is_categorical() #是否分类数据
df.index.is_type_compatible(df.index) #类型是否兼容
df.index.is_type_compatible(1)#类型是否兼容
df.index.isna() #array是否为空
df.index.isnull() #array是否缺失值
df.index.join(df.index,how='left') #链接
df.index.notna() #是否不存在的值
df.index.notnull()#是否不存在的值
df.index.ravel() #展平值的ndaray
df.index.reindex(['a','b']) #新索引(Index,array:0-n)
df.index.searchsorted('f') #如果插入这个值,排序后再哪个索引位置
df.index.searchsorted([0,4]) #array([0,3]) 多个
#df.index.set_names('quarter') #设置索引名称

#df.index.set_names('specees',level=None) #非多层索引,level必须为空
#df.index.set_names(['name','team'],inplace=True)
# df.index.shift(10,freq='D') #日期索引向前移动10天
df.add_prefix('t_') #表头加前缀
df.add_suffix('_d')#表头加后缀
df.first_valid_index()#第一个有值得索引
df.last_valid_index()#最后一个有值得索引

1.7索引重命名 

#索引重命名  索引只能使用df.rename_axis方法
#s.rename_axis('student_name')#索引重命名
#df.rename_axis(['name','team']) #多层索引修改索引名
df.rename_axis('info',axis='columns') #修改行索引名称
df.rename_axis(index={'a':'A','b':'B'})
df.rename_axis(columns=str.upper) #行索引变大写

1.8 修改索引内容(df.rename,df.set_axis,使用df.set_axis时与原有索引的长度必须一致)

#一一对应修改列索引
df.rename(columns={'name':'NAME','team':'TEAM'}) 
df.rename(str.lower,axis='columns')
#修改行索引
df.rename(index={0:'x',1:'z',2:'y'})
df.rename({1:2,2:4},axis='index')
df.rename(index=str)#修改数据类型
#重新修改索引
# replacements={11:12 for 11 , 12 in zip(list1,list2)}
# df.rename(replacements)
df.rename(lambda x:'t_'+x,axis=1) #列名加前缀
df.rename(lambda x,y = iter('abcdef'):next(y),axis=1)#利用iter()函数的next特性修改
df.rename(columns=dict(zip(df,list('abcd')))) #修改列名,用解包形式生成新旧字段字典


#f.set_axis(['a','b','c'],axis='index')#修改行索引
df.set_axis(list('abcdef'),axis=1) #修改列索引
#df.set_axis(['a','b'],axis='columns',inplace=True) #使修改生效
df.set_axis(pd.Index(list('abcde')),axis=0) #传入索引内容(行)

 

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值