• Pandas系列教程(11)Pandas的索引index


    Pandas的索引index

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

    index的用途总结:

    1. 更方便的数据查询

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

    3. 自动的数据对其功能

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

    1、使用index查询数据

    import pandas as pd
    
    df = pd.read_csv('../../datas/files/ratings.csv')
    print('*' * 25, '1. 读取csv文件,打印前几行数据', '*' * 25)
    print(df.head())
    print('*' * 25, '计算条数', '*' * 25)
    print(df.count())
    
    # -------------------- 1. 使用index查询数据 ------------------------ #
    # drop==False,让索引列还保持在column
    df.set_index('userId', inplace=True, drop=False)
    print('*' * 25, '打印前几行数据', '*' * 25)
    print(df.head())
    print('*' * 25, '打印索引', '*' * 25)
    print(df.index)
    
    # 使用index的查询方法
    print('*' * 25, '使用index的查询方法', '*' * 25)
    print(df.loc[500].head(5))
    
    # 使用column的condition查询方法
    print('*' * 25, '使用column的condition查询方法', '*' * 25)
    print(df.loc[df['userId'] == 500].head())

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

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

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

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

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

    import pandas as pd
    import timeit
    from sklearn.utils import shuffle
    
    df = pd.read_csv('../../../datas/files/ratings.csv')
    print('*' * 25, '1. 读取csv文件,打印前几行数据', '*' * 25)
    print(df.head())
    
    # 将数据随机打散
    print('*' * 25, '2. 将数据随机打散,打印前几行数据', '*' * 25)
    df_shuffle = shuffle(df)
    print(df_shuffle.head())
    
    # 判断索引是否是递增的
    print('*' * 25, '3. 判断索引是否是递增的', '*' * 25)
    print(df_shuffle.index.is_monotonic_increasing)
    
    # 判断索引是否唯一
    print('*' * 25, '4. 判断索引是否唯一', '*' * 25)
    print(df_shuffle.index.is_unique)
    
    # 计时查询id==500的数据查询性能
    print('*' * 25, '4. 计时查询id==500的数据查询性能', '*' * 25)
    def test():
        return df_shuffle.loc[500]
    print(timeit.timeit(stmt=test, number=10))

    实验二:将index排序后的查询

    import pandas as pd
    import timeit
    from sklearn.utils import shuffle
    
    df = pd.read_csv('../../../datas/files/ratings.csv')
    print('*' * 25, '1. 读取csv文件,打印前几行数据', '*' * 25)
    print(df.head())
    
    # 将数据随机打散
    print('*' * 25, '2. 将数据随机打散,打印前几行数据', '*' * 25)
    df_shuffle = shuffle(df)
    print(df_shuffle.head())
    
    # 将数据按照index排序
    print('*' * 25, '3. 将数据按照index排序,打印前几行数据', '*' * 25)
    df_sorted = df_shuffle.sort_index()
    print(df_sorted.head())
    
    # 判断索引是否是递增的
    print('*' * 25, '4. 判断索引是否是递增的', '*' * 25)
    print(df_sorted.index.is_monotonic_increasing)
    
    # 判断索引是否唯一
    print('*' * 25, '5. 判断索引是否唯一', '*' * 25)
    print(df_sorted.index.is_unique)
    
    # 计时查询id==500的数据查询性能
    print('*' * 25, '5. 计时查询id==500的数据查询性能', '*' * 25)
    def test():
        return df_sorted.loc[500]
    print(timeit.timeit(stmt=test, number=10))

    使用index能自动对齐数据

    import pandas as pd
    
    s1 = pd.Series([1, 2, 3], index=list('abc'))
    print(s1)
    
    s2 = pd.Series([2, 3, 4], index=list('bcd'))
    print(s2)
    
    print(s1 + s2)

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

    • CategoricalIndex, 基于分类数据的index,提升性能;

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

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

  • 相关阅读:
    [Python] 登录人人网2011版
    [WPF] 自定义窗体样式
    [Python] 控制台输入密码的方法
    [Python] 字符串加密解密
    [WPF] 模仿AMD LIVE! EXPLORER界面
    [Python] Visual Studio 2008 集成 IronPython 开发环境
    mysql表类型(存储引擎)
    logstash收集nginx访问日志
    linux设置开机启动脚本
    logstash安装log4j插件
  • 原文地址:https://www.cnblogs.com/xingxingnbsp/p/13851900.html
Copyright © 2020-2023  润新知