zoukankan      html  css  js  c++  java
  • 基于pandas索引的数据查找、排序和去重小结

    由于Pandas的索引比较复杂,常常在使用过程中容易搞混,所以整理一份关于索引的查找、排序、去重的总结文档。

    import pandas as pd
    import numpy as np
    
    #定义DataFrame
    dict={'a':[1,2,3],'b':[4,5,6],'c':[7,8,9]}
    df=pd.DataFrame(dict,index=['one','two','three'])
    df
    
    a b c
    one 1 4 7
    two 2 5 8
    three 3 6 9

    1.Series通过索引查找

    可用Index ,也可用数字下标

    s1=df['b']
    s1['two']
    s1[['two','one']]  # 用数组列出离散的标签,要用[ ]括起来
    s1['two':'three']  # 标签切片
    s1[0:2]            # 标号切片的右区间是开的
    

    2.DataFrame通过索引查找

    (1) 直接通过列索引取列

    df['b']
    df[['b','c']]  # 用数组列出离散的标签,要用[ ]括起来
    

    (2) .loc 通过标签索引数据

    • 先写行标签,后写列标签
    • 列举多个列,要用数组,用[ ]括起来
    • 列举切片,则无需用[ ]括起来。注意标签切片的右括号是闭合的
    df.loc[['two','one']]   #索引多行,行名用数组
    df.loc['two':'three']   #索引多行,行名用切片
    df.loc[:,['b','a']] #索引某行多列,列名用数组
    df.loc[:,'b':'a']   #索引某行多列,列名用切片
    

    (3) .iloc 通过通过标号获取数据

    • 先写行号,再写列号
    • 可用单值,也可用切片,注意:标号切片的右括号是开区间的
    df.iloc[1:3,1:3]
    

    3.索引和列之间的转换

    (1) 列-->索引

    • inplace参数可以定义是否覆盖原数据
    df.set_index('a', inplace=True)  # inplace=True 会在原变量直接改,没有返回值
    df
    
    df1=df.set_index('a', inplace=False)  # inplace=False则有返回值(默认),原变量不变
    df1
    

    (2) 索引-->列

    • 索引变成列会排在DataFrame的第一列
    df.reset_index(inplace=True) 
    df
    

    4.利用索引进行排序

    • 通过索引排列,升序排列、不覆盖原数据、如有缺失值则放在前面
    df.sort_index(ascending=True, inplace=False, na_position='first')
    

    5.根据索引进行数据去重

    • keep='first' or 'last',可以选择保留第一条或最后一条
    df=df[~df.index.duplicated(keep='first')]
    
  • 相关阅读:
    junit单元测试
    方法引用
    方法引用表达式(1)
    Stream流的常用方法
    Stream流
    综合案例:文件上传
    tcp通信协议
    python 生成器与迭代器
    Python 序列化与反序列化
    python 文件操作
  • 原文地址:https://www.cnblogs.com/laiyaling/p/11793938.html
Copyright © 2011-2022 走看看