pandas 索引常用操作

索引操作

建立索引

df.set_index(‘name’) # 设置name列为索引

df.set_index([‘name’,‘team’]) #设置层级索引

df.set_index([df.name.str[0],‘name’]) #设置层级索引

df.set_index(‘name’,inplace=True) #设置 inplace=True参数可以直接修改原df

s=pd.Series(i for i in range(100))

df.set_index(s) # 指定一个series

df.set_index([s,‘name’]) # 同时指定series和现有字段

df.set_index(‘name’,drop=False) # 保留原列

df.set_index(‘name’,append=True) # 保留原索引

重置索引

df.reset_index() # 清除索引

df.reset_index(inplace=True) #设置 inplace=True参数可以直接修改原df

df.reset_index([‘month’,‘year’]).reset_index(level=1) # year一级索引清除

df.reset_index(level=‘class’) # class一级索引清除

索引常用方法

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(‘_’) # str 分隔

df.index.to_list() # 转换为列表

df.index.to_frame(index=False,name=‘a’) # 转称DataFrame

df.index.to_series() # 转为serise

df.index.to_numpy() # 转为numpy

df.index.unique() # 去重

df.index.value_counts() # 去重及计数

df.index.where(df.index==‘a’) # 筛选

df.index.rename(‘grade’,inpalce=False) # 重命名索引

df.index.rename([‘species’,‘year’]) # 多层,重命名索引

df.index.T # 转置,在多层索引里很有用

df.index.set_names(‘species’,level=0) # 设置名称

df.index.set_names([‘kind’,‘year’],inplace = True) # 设置名称

索引重命名

rename_axis 方法可以修改索引,也可以修改列名

s.rename_axis(‘student_name’) # 重命名series 索引

df.rename_axis([‘dow’,‘hr’]) # 多层索引修改名称

df.rename_axis(‘info’,axis=‘columns’) #修改列索引

df.rename_axis(columns={‘name’:‘s_name’,‘b’:‘B’}) # 修改层级索引名称

df.rename_axis(columns=str.upper) # 列索引名变大写

修改索引内容

df.rename和df.set_axis可以修改行、列的索引

df.rename(columns={‘A’:‘a’,‘B’:‘c’}) # 一 一对应修改列索引

df.rename(index={‘A’:‘a’,‘B’:‘c’}) # 修改行索引

df.rename({‘A’:‘a’,‘B’:‘c’},axis=‘index’) # 修改行索引 axis=0

df.rename(index=str) # 修改索引数据类型

df.rename(lambda x:‘t_’+x ,axis=1) # 修改列名

df.rename(lambda x,y = iter(‘abcdef’):next(y),axis=1) # 利用iter()函数的next特性修改列名

统计计算

描述统计

df.describle() 返回一个多行的所有数字列的统计表:总数、平均数、标准差、最小值、四分位数、最大值等

如果没有数字,则会输出与字符相关的统计数据:数量、不重复值数、最大值(按照首字母顺序)

数学统计

  • df.mean() # 返回所有列的均值
  • df.mean(1) # 返回所有行的均值
  • df.corr() # 返回列与列之间的相关系数
  • df.count() # 返回每一列中的非空值的个数
  • df.max() # 返回每一列的最大值
  • df.min() # 返回每一列的最小值
  • df.median() # 返回每一列的中位数
  • df.std() # 返回每一列的标准差
  • df.var() # 方差
  • df.mode() # 众数
  • df.sem() # 平均值的标准误差

非统计计算

df.round({‘Q1’:2,‘Q2’:0}) # 指定Q1四舍五入保留两位小数,Q2四舍五入保留整数

df.nunique() #每个列的去重值的数量

s.value_counts() # series不重复的值及数量

s.value_counts(normalize=True) # series不重复值的频率

s.value_counts(sort=True) # series不重复值的频率

s.unique() # series 去重的值array

s.is_unique() # series 是否有重复

位置计算

位置差值diff()

df.diff()可以做位移差操作,经常用来计算一个序列数据中上一个和下一个数据之间的差值;如果是增量研究,默认被减的数列下移一位,原数据在同位置上对位移后的数据相减,得到一个新的序列,第一位由于被减数下移,没有数据,结果是NaN;可以传入一个数值来规定移动多少位,负数表示方向移动。如果Series类型不是数字,会报错

pd.Series([9,4,6,7,9]).diff()

pd.Series([9,4,6,7,9]).diff(-2)

对于DataFrame 可以传入axis=1进行左右移动

df.loc[:5,‘Q1’:‘Q4’].diff(1,axis=1)

位置移动shift()

shift()可以对数据进行位移,不做任何计算

df.shift() # 整体下移一行,最顶的一行位NaN

df.shift(3) ## 移动三行

df.Q1.head().shift(-1) # 整体上移以上,最后一行为NaN

df.shift(axis=1) # 右移一位

df.shift(axis=3) # 右移三位

df.shift(-1,axis=1) # 左移一位

df.Q1-df.Q1.shift() # 实现了df.Q1.diff()

位置序号rank()

rank()可以生成数据的排序值替换原来的数据值,支持对所有类型的数据排序

df.head().rank(axis=1) # 横向排名

df.head().rank() # 纵向排名

数据选择

df[col] # 选择列

df.loc[label] # 按照索引选择行 ,df.loc[<行表达式>,<列表达式>]

df.iloc[loc] # 按照数字索引选择行,df.iloc[<行表达式>,<列表达式>],只能用于数字索引

df[5:10] # 切片选择行

df[bool_vec] # 使用表达式筛选行

df.at[4,‘Q1’] # 取某一个值,df.at[<索引>,<索引>]

df.iat[4,2] # 取某一个值,df.iat[<索引>,<索引>] 只能用与数字索引

df.get(‘name’,0) # 获取name列,如果不存在,返回0 ; df.get(key,default=None) ,如果无值,返回默认值

df.truncate() 可以对DataFrame和Series进行截取,可以将索引传入before和after参数,将这个区间外的数据剔除

df.truncate(before=2,after=4) 取出2,3,4行数据

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值