• Part 11:Pandas的索引index所具备的四大性能


    Pandas的索引index

    Pandas的索引index的用途:

    把数据存储于普通的column列也能用于数据查询,那使用index有什么好处?

    index的用途总结:

    1.更方便的数据查询;

    2.使用index可以获得性能提升;

    3.自动的数据对齐功能;

    4.更多更强大的数据结构支持;

    1.更方便的数据查询

    1. import pandas as pd
    2. df=pd.read_csv('./datas/ml-latest-small/ratings.csv')
    3. df.head()

    查询index的数量:df.count()

    df.count()


     

    drop==False,让索引列还保持在column:意思就是使id这一列继续存在于数据当中

    1. #drop==False,让索引列还保持在column:意思就是使id这一列继续存在于数据当中
    2. df.set_index('userId',inplace=True,drop=False)
    3. df.head()

    df.index

     

    第一种:使用index查询的方法---会使查询的代码比较简单
    df.loc[500].head() 

    1. #第一种:使用index查询的方法---会使查询的代码比较简单
    2. df.loc[500].head()

    第二种:使用column的condition查询方法
    condition=df['userId']
    df.loc[condition==500].head() 

    1. #第二种:使用column的condition查询方法
    2. condition=df['userId']
    3. df.loc[condition==500].head()

     

    2.使用index会提升查询性能

    如果index是唯一的,Pandas会使用哈希表优化,查询性能为O(1);

    如果index不是唯一的,但是有序,Pandas会使用二分查找算法,查询性能为O(logN);

    如果index是完全随机的,那么每次查询都要扫描全表,查询性能为O(N);

    实验1:完全随机的顺序查询 

    将数据随机打散

    1. !pip install sklearn
    2. #将数据随机打散
    3. from sklearn.utils import shuffle
    4. df_shuffle=shuffle(df)
    5. df_shuffle.head()

    查询我们的索引是不是递增的
    df_shuffle.index.is_monotonic_increasing 

    1. #查询我们的索引是不是递增的
    2. df_shuffle.index.is_monotonic_increasing

    查询我们的索引是不是递减的
    df_shuffle.index.is_monotonic_decreasing

    1. #查询我们的索引是不是递减的
    2. df_shuffle.index.is_monotonic_decreasing

      %timeit 函数是经过大量运算,统计计算出平均运行所用的时间
     计时,查询id==500数据性能
    %timeit df_shuffle.loc[500]

    1. # %timeit 函数是经过大量运算,统计计算出平均运行所用的时间
    2. # 计时,查询id==500数据性能
    3. %timeit df_shuffle.loc[500]

    实验2:将index排序后查询 

    调用sort函数默认为升序操作

    1. #调用sort函数默认为升序操作
    2. df_sorted=df_shuffle.sort_index()
    3. df_sorted.head()
    4. df_sorted.index.is_monotonic_increasing

    调用sort函数默认为降序操作 设置为ascending=False为降序操作
     

    1. #调用sort函数默认为降序操作 设置为ascending=False为降序操作
    2. df_sorted2=df_shuffle.sort_index(ascending=False)
    3. df_sorted2.index.is_monotonic_decreasing

    判断索引是不是唯一的
    df_sorted.index.is_unique

    1. #判断索引是不是唯一的
    2. df_sorted.index.is_unique

    如果index不是唯一的,但是有序,Pandas会使用二分查找算法,查询性能为O(logN);
    %timeit df_sorted.loc[500]

    1. #如果index不是唯一的,但是有序,Pandas会使用二分查找算法,查询性能为O(logN);
    2. %timeit df_sorted.loc[500]

    3、使用index能自动对齐数据

    包括series和dataframe

    index会自动对齐

    1. #index会自动对齐
    2. s1=pd.Series([1,2,3],index=list('abc'))
    3. s1
    1. s2=pd.Series([2,3,4],index=list('bcd'))
    2. s2

    当s1+s2中遇到另一方没有找到相同的索引时,会显示NaN,无法进行算术操作时
     

    1. #当s1+s2中遇到另一方没有找到相同的索引时,会显示NaN,无法进行算术操作时
    2. s1+s2


     

    4.使用index更多更强大的数据结构支持

    很多强大的索引数据结构

    Categoricallndex,基于分类数据的Index,提升性能;

    Multilndex,多维索引,用于groupby多维聚合后结果等;

    Datetimelndex,时间类型索引,强大的日期和时间的方法支持;

     

     

  • 相关阅读:
    C语言文件操作
    领域驱动设计——领域对象的生命周期
    main函数中argc和argv是什么意思
    介绍numpy数组
    3.5 Redis无磁盘化复制
    解决node_modules\node-sassnpm ERR! command failed
    猿创征文|分布式事务常见解决方案
    第67步 时间序列建模实战:ARIMA建模(Stata)
    什么是Base64?
    经典背包系列问题
  • 原文地址:https://blog.csdn.net/qq_46044325/article/details/126858119