栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

pandas中的索引和多层索引

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

pandas中的索引和多层索引

索引分类
  • Index;单层索引;
  • MultiIndex;多层索引;

举例:

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.rand(4, 4))*10//1
print(df)

输出结果为:

     0    1    2    3
0  7.0  9.0  6.0  1.0
1  9.0  0.0  2.0  2.0
2  3.0  7.0  8.0  4.0
3  7.0  6.0  8.0  4.0
单层索引
  • 创建dataframe时,如果没有指定index和columns参数,pandas将会自动生成对应的索引;
    • 默认的行列标签皆为一个RangeIndex对象,属于Index中的一种形式;
      • 比如:
        print(df.index)
        
        输出结果为:
        RangeIndex(start=0, stop=4, step=1)
        
  • Index是更通用的函数,通过Index函数可以创建Index对象,更改dataframe的索引;
    Index_A = df.index = pd.Index(list('ABCD'))
    df.columns = pd.Index(list('abcd'))
    
    print(df)
    print(Index_A)
    
    输出结果为:
         a    b    c    d
    A  8.0  8.0  6.0  5.0
    B  1.0  4.0  4.0  4.0
    C  3.0  9.0  8.0  6.0
    D  3.0  1.0  0.0  0.0
    Index(['A', 'B', 'C', 'D'], dtype='object')
    
    • index对象包含以下属性:
      • 值构成的数组:
        Index_A.array
        
        输出为:
        
        ['A', 'B', 'C', 'D']
        Length: 4, dtype: object
        
      • 数据类型:
        Index_A.dtype
        
        输出为:
        dtype('O')
        
      • level个数:
        Index_A.nlevels
        
        输出为:
        1
        
      • 维度:
        Index_A.ndim
        
        输出为:
        1
        
      • 尺寸:
        Index_A.shape
        
        输出为:
        (4,)
        
      • 个数:
        Index_A.size
        
        输出为:
        4
        
      • 值:
        Index_A.values
        
        输出为:
        array(['A', 'B', 'C', 'D'], dtype=object)
        
索引操作
  • 获取索引index;
    df.index
    
    • 访问当前数据的索引;
  • 指定索引
    df.index = ['x', 'y']
    
  • 重新设置索引
    df.reindex(list('abcde'))
    
  • 指定某一列作为索引
    df.set_index('column_name', drop=False)
    
  • 返回索引的唯一值
    df.set_index('column_name').index.unique()
    
特殊索引类型
  • NumericIndex,数值索引;
    • 浮点数索引:
      pd.Float64Index([1, 2, 3, 4])
      
      输出为:
      [1.0, 2.0, 3.0, 4.0]
      
    • 整数;Int64Index
    • 无符号整数;UInt64Index
    • 等差序列;
      pd.RangeIndex(start=1,stop=8,step=2)
      
  • CategoricalIndex,范围索引;
    • 约束可选值的范围,超过范围的值强制变为NaN;
      df.index = pd.CategoricalIndex(list('ABCD'), categories=['A', 'B', 'C'])
      
      则D的位置显示NaN
  • IntervalIndex,区间索引;
    • 索引的值为一个区间,通过interval_range函数创建;
      df.index = pd.interval_range(start=0, end=4)
      
      此时索引的形式:
      (0, 1]
      (1, 2]
      ……
      
  • DatetimeIndex,时间索引;
  • PeriodIndex
    • 和DatetimeIndex类似,值为日期和时间的格式化结果
  • TimedeltaIndex;
    • 将时间间隔转换为时间戳;
多层索引(复合索引)
  • 当多个单层的索引结合在一起时,就形成了多层索引;
  • 适用于多种分类标准的场景,极大增强了数据处理的灵活性;
设置方式
  • 使用set_index()函数;
    • 举例:
      df_1 = pd.DataFrame({"a":range(4), "b":range(4, 0, -1), "c":['one', 'two', 'one', 'two'], "d":list("asdf")})
      df_2 = df_1.set_index(["c", "d"])
      print(df_2)
      
      输出结果为:
             a  b
      c   d      
      one a  0  4
      two s  1  3
      one d  2  2
      two f  3  1
      
  • 可以使用数组、元组、DataFrame创建;
  • 使用from_product函数创建;
多层索引操作
  • 替换索引层次;
    df_1.swaplevel()
    
    • 取值时,从外层向内层逐层取值,有时需要交换次序才能取值;
  • 取出特定位置值:
    df_1.loc["one"].loc["a"]
    
    • 区别于dataframe,在series中直接在方括号中写索引即可取值;
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/870353.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号