• [Pandas] 数据选择


    Pandas常用的数据选择操作

    操作

    语法
    选择列df['列名'] 或 df.列名
    使用切片选择行df[5:10]
    按索引选择行df.loc[label]
    按数字索引选择行df.iloc[loc]
    用表达式筛选行

    df[bool_vec]

    数据选择,即按照一定的条件对数据进行筛选,通过Pandas提供的方法可以模拟Excel对数据的筛选操作,可灵活应对各种数据的查询需求

    1.选择列

    1. import pandas as pd
    2. df = pd.DataFrame([['liver','E',89,21,24,64],
    3. ['Arry','C',36,37,37,57],
    4. ['Ack','A',57,60,18,84],
    5. ['Eorge','C',93,96,71,78],
    6. ['Oah','D',65,49,61,86]
    7. ],
    8. columns = ['name','team','Q1','Q2','Q3','Q4'])
    9. # 以下两种方法会返回'name'列的数据,得到的数据类型为Series
    10. res1 = df['name']
    11. res2 = df.name
    12. res3 = df.Q1
    13. type(res3) # pandas.core.series.Series
    14. #--------------------------------------------------------------------
    15. print(res1 == res2)
    16. # 输出结果:
    17. # 0 True
    18. # 1 True
    19. # 2 True
    20. # 3 True
    21. # 4 True
    22. # Name: name, dtype: bool
    23. #--------------------------------------------------------------------

    df

    res1

    res2

    res3 

    2.使用切片选择行(切片[])

    我们可以像列表那样利用切片功能选择部分行的数据(索引值从0开始),但是不支持仅索引一条数据,需要注意的是,Pandas使用切片的逻辑与Python列表的逻辑一样,不包括右边的索引值

    1. import pandas as pd
    2. df = pd.DataFrame([['liver','E',89,21,24,64],
    3. ['Arry','C',36,37,37,57],
    4. ['Ack','A',57,60,18,84],
    5. ['Eorge','C',93,96,71,78],
    6. ['Oah','D',65,49,61,86]
    7. ],
    8. columns = ['name','team','Q1','Q2','Q3','Q4'])
    9. # 前两行数据
    10. res1 = df[:2]
    11. # 后两行数据
    12. res2 = df[3:]
    13. # 所有数据(不推荐)
    14. res3 = df[:]
    15. # 按步长取
    16. res4 = df[:5:2]
    17. # 反转顺序
    18. res5 = df[::-1]
    19. # 报错
    20. res6 = df[2]

    df

    res1

    res2

    res3

    res4

    res5 

    如果切片里是一个列名组成的列表(形式: df[['列名','列名',...]]),则可以筛选出多列数据 

    1. import pandas as pd
    2. df = pd.DataFrame([['liver','E',89,21,24,64],
    3. ['Arry','C',36,37,37,57],
    4. ['Ack','A',57,60,18,84],
    5. ['Eorge','C',93,96,71,78],
    6. ['Oah','D',65,49,61,86]
    7. ],
    8. columns = ['name','team','Q1','Q2','Q3','Q4'])
    9. # 筛选'name','team'两列数据
    10. res = df[['name','team']]
    11. # 需要区别的是,如果只有一列(格式: df[['列名']]),则会是一个DataFrame:
    12. res1 = df[['name']]
    13. type(res1) # pandas.core.frame.DataFrame
    14. res2 = df['name']
    15. type(res2) # pandas.core.series.Series

    df

    res

    res1

    res2 

    3.按索引选择行(按轴标签.loc)

    loc: works on labels in the index

    按轴标签.locicon-default.png?t=M5H6https://blog.csdn.net/Hudas/article/details/123096447?spm=1001.2014.3001.5502

    4.按数字索引选择行(按数字索引.iloc)

    iloc: works on the positions in the index(so it only takes integers)

    按数字索引.ilocicon-default.png?t=M5H6https://blog.csdn.net/Hudas/article/details/123096447?spm=1001.2014.3001.5502

    5.用表达式筛选行

    1. import pandas as pd
    2. df = pd.DataFrame([['liver','E',89,21,24,64],
    3. ['Arry','C',36,37,37,57],
    4. ['Ack','A',57,60,18,84],
    5. ['Eorge','C',93,96,71,78],
    6. ['Oah','D',65,49,61,86]
    7. ],
    8. columns = ['name','team','Q1','Q2','Q3','Q4'])
    9. # Q1等于36
    10. res1 = df[df['Q1'] == 36]
    11. # Q1不等于36
    12. res2 = df[~(df['Q1'] == 36)]
    13. # 姓名为'Eorge'
    14. res3 = df[df['name'] == 'Eorge']
    15. # 筛选Q1大于Q2的行记录
    16. res4 = df[df.Q1 > df.Q2]

    df

    res1

    res2

    res3

    res4 


    美图欣赏2022/06/24
  • 相关阅读:
    企业需要的IOS证书
    echarts散点图的圆点设置成不同的自定义图片且使用本地静态资源图片的写法
    milvus
    你最少用几行代码实现深拷贝?
    哈希表的实现
    Kotlin编程实战——概述(01)
    C# 面向对象之多态
    动手学强化学习(一)
    我的创作纪念日
    Redis系列学习文章分享---第三篇(Redis快速入门之Java客户端--短信登录+session+验证码+拦截器+登录刷新)
  • 原文地址:https://blog.csdn.net/Hudas/article/details/123989367