• [黑马程序员Pandas教程]——DataFrame查询数据


    目录:

    1. 学习目标
    2. 获取DataFrame子集的基本方法
      1. 从前从后取多行数据
        1. 默认获取前5行df.head()
        2. 默认获取倒数5行df.tail()
      2. 获取一列或多列数据
        1. 获取一列数据df[col_name]等同于df.col_name
        2. 获取多列数据df[[col_name1,col_name2,...]]
      3. 布尔值向量获取数据行
        1. 布尔值列表取出对应为True的数据行
        2. 布尔值构成的Series取出对应为True的数据行
        3. 布尔值构成的ndarray取出对应为True的数据行
      4. 索引下标切片取行df[start:stop:step]
    3. loc通过行列名获取子集
      1. 索引值获取1行数据df.loc[row_name]
      2. 索引值获取多行数据df.loc[[row_name1,row_name2...]]
      3. 索引值切片获取多行数据`df.loc[start_index_value:end_index_value:step]` 左闭右闭
      4. 布尔值向量获取行数据df.loc[布尔值向量]
      5. 布尔值向量取行再配合列名取子集df.loc[布尔值向量,[col_name1,col_name2…]]
      6. 索引值取行再配合列名取子集df.loc[[cow_name1,cow_name2...],[col_name1,col_name2…]]
      7. 列名取子集df.loc[:,[col_name1,col_name2…]
    4. iloc通过行列下标获取子集
      1. 行号取1行df.iloc[row_n]
      2. 行号取多行df.iloc[[row_1,row_2,…]]
      3. 行号下标切片取多行df.iloc[start:end:step] 左闭右开
      4. 行列下标切片取子集
      5. 行下标切片和列下标取子集
      6. 行下标和列下标取子集
      7. 行下标和列下标切片取子集
    5. 查询函数获取子集df.query()
    6. 判断是否存在某个值isin函数
    7. 总结
    8. 项目地址

    1.学习目标

    • 掌握获取df一列或多列数据的方法

    • 知道loc和iloc的区别以及使用方法

    • 知道df的query函数的使用方法

    • 知道isin函数的作用和使用方法

    2.获取DataFrame子集的基本方法

    1.从前从后取多行数据
    默认获取前5行df.head()
    1. import pandas as pd
    2. # 加载csv数据,指定gbk编码格式来读取文件,返回df
    3. df = pd.read_csv('../datas/data_set/1960-2019全球GDP数据.csv', encoding='gbk')
    4. # 默认取前5行数据
    5. print(df.head())
    6. # 前10行
    7. print(df.head(10))
    默认获取倒数5行df.tail()
    1. import pandas as pd
    2. # 加载csv数据,指定gbk编码格式来读取文件,返回df
    3. df = pd.read_csv('../datas/data_set/1960-2019全球GDP数据.csv', encoding='gbk')
    4. # 默认取后5行数据
    5. print(df.tail())
    6. # 倒数15行
    7. df2 = df.tail(15)
    8. print(df2)
    2.获取一列或多列数据
    获取一列数据df[col_name]等同于df.col_name
    1. import pandas as pd
    2. # 加载csv数据,指定gbk编码格式来读取文件,返回df
    3. df = pd.read_csv('../datas/data_set/1960-2019全球GDP数据.csv', encoding='gbk')
    4. df2 = df.tail(15)
    5. print(df2['country'])
    6. # print(df2.country)
    7. # 注意!如果列名字符串中间有空格的,只能使用df['country']这种形式
    获取多列数据df[[col_name1,col_name2,...]]
    1. import pandas as pd
    2. # 加载csv数据,指定gbk编码格式来读取文件,返回df
    3. df = pd.read_csv('../datas/data_set/1960-2019全球GDP数据.csv', encoding='gbk')
    4. df2 = df.tail(15)
    5. # 返回新的df
    6. print(df2[['country', 'GDP']])
    3.布尔值向量获取数据行 
    • 布尔值向量:完全由布尔值组成的一维数据,布尔值向量形式为

      • 布尔值构成的列表

      • 布尔值构成的series

      • 布尔值构成的numpy.ndarray

    • df[布尔值向量] 其中布尔值向量的布尔值个数必须和df的行数(df.shape[0])相等

    布尔值列表取出对应为True的数据行
    1. import pandas as pd
    2. # 加载csv数据,指定gbk编码格式来读取文件,返回df
    3. df = pd.read_csv('../datas/data_set/1960-2019全球GDP数据.csv', encoding='gbk')
    4. df3 = df.tail()
    5. print(df3)
    6. print(df3[[False, True, False, False, False]])
    布尔值构成的Series取出对应为True的数据行
    1. import pandas as pd
    2. # 加载csv数据,指定gbk编码格式来读取文件,返回df
    3. df = pd.read_csv('../datas/data_set/1960-2019全球GDP数据.csv', encoding='gbk')
    4. df3 = df.tail()
    5. # df3['country']=='帕劳'
    6. # 返回布尔值构成的series对象
    7. print(df3)
    8. print(df3[df3['country'] == '帕劳'])
    布尔值构成的ndarray取出对应为True的数据行
    1. import numpy as np
    2. import pandas as pd
    3. # 加载csv数据,指定gbk编码格式来读取文件,返回df
    4. df = pd.read_csv('../datas/data_set/1960-2019全球GDP数据.csv', encoding='gbk')
    5. n1 = np.array([False, True, False, False, False])
    6. df3 = df.tail()
    7. print(df3)
    8. print(df3[n1])
    4.索引下标切片取行df[start:stop:step]
    • df[start:stop:step] == df[起始行下标:结束行下标:步长] , 遵循左闭右开原则(包含起始行,不包含结束行),步长默认为1
    1. import pandas as pd
    2. # 加载csv数据,指定gbk编码格式来读取文件,返回df
    3. df = pd.read_csv('../datas/data_set/1960-2019全球GDP数据.csv', encoding='gbk')
    4. df4 = df.head(10) # 取原df前10行数据作为df4,默认自增索引由0到9
    5. print(df4)
    6. df5 = df4[0:3] # 取前3行
    7. print(df5)
    8. df6 = df4[:5:2] # 取前5行,步长为2
    9. print(df6)
    10. df7 = df4[1::3] # 取第2行到最后所有行,步长为3
    11. print(df7)

    3.loc通过行列名获取子集

    • df.loc[]通过行名(索引值、索引名)、列名获取子集
    1.索引值获取1行数据df.loc[row_name]
    1. import pandas as pd
    2. # 加载csv数据,指定gbk编码格式来读取文件,返回df
    3. df = pd.read_csv('../datas/data_set/1960-2019全球GDP数据.csv', encoding='gbk')
    4. df4 = df.head(10) # 取原df前10行数据作为df4,默认自增索引由0到9
    5. print(df4)
    6. df5 = df4.loc[2] # 获取索引为2的一行数据
    7. print(df5)
    2.索引值获取多行数据df.loc[[row_name1,row_name2...]]
    1. import pandas as pd
    2. # 加载csv数据,指定gbk编码格式来读取文件,返回df
    3. df = pd.read_csv('../datas/data_set/1960-2019全球GDP数据.csv', encoding='gbk')
    4. df4 = df.head(10) # 取原df前10行数据作为df4,默认自增索引由0到9
    5. print(df4)
    6. df5 = df4.loc[[0, 2]] # 获取索引为0和2的数据,返回df
    7. print(df5)
    3.索引值切片获取多行数据`df.loc[start_index_value:end_index_value:step]` 左闭右闭
    • 注意df.loc[start_index_value:end_index_value:step]不等同于df[start:end:step]

    1. import pandas as pd
    2. # 加载csv数据,指定gbk编码格式来读取文件,返回df
    3. df = pd.read_csv('../datas/data_set/1960-2019全球GDP数据.csv', encoding='gbk')
    4. df4 = df.head(10) # 取原df前10行数据作为df4,默认自增索引由0到9
    5. print(df4)
    6. df5 = df4.loc[:5:2] # 表示获取索引值0到5,每2行取一行
    7. print(df5)
    8. df6 = df4[:5:2] # 等同于df4.iloc[:5:2]
    9. print(df6)
    4.布尔值向量获取行数据df.loc[布尔值向量]
    • df.loc[[bool1,bool2,…]] 等同于 df[[bool1,bool2,…]]

    1. import pandas as pd
    2. import numpy as np
    3. # 加载csv数据,指定gbk编码格式来读取文件,返回df
    4. df = pd.read_csv('../datas/data_set/1960-2019全球GDP数据.csv', encoding='gbk')
    5. df3 = df.tail()
    6. print(df3)
    7. df4 = df3.loc[[False, True, False, False, False]]
    8. print(df4)
    9. df5 = df3.loc[df3['country'] == '帕劳']
    10. print(df5)
    11. n1 = np.array([False, True, False, False, False])
    12. df6 = df3.loc[n1]
    13. print(df6)
    5.布尔值向量取行再配合列名取子集df.loc[布尔值向量,[col_name1,col_name2…]]
    1. import pandas as pd
    2. # 加载csv数据,指定gbk编码格式来读取文件,返回df
    3. df = pd.read_csv('../datas/data_set/1960-2019全球GDP数据.csv', encoding='gbk')
    4. df3 = df.tail()
    5. print(df3)
    6. df4 = df3.loc[df3['country'] == '帕劳', ['country', 'GDP']]
    7. print(df4)
    6.索引值取行再配合列名取子集df.loc[[cow_name1,cow_name2...],[col_name1,col_name2…]]
    1. import pandas as pd
    2. # 加载csv数据,指定gbk编码格式来读取文件,返回df
    3. df = pd.read_csv('../datas/data_set/1960-2019全球GDP数据.csv', encoding='gbk')
    4. df3 = df.tail()
    5. print(df3)
    6. df4 = df3.loc[[9926], ['country', 'GDP']]
    7. print(df4)
    7.列名取子集df.loc[:,[col_name1,col_name2…]
    1. import pandas as pd
    2. # 加载csv数据,指定gbk编码格式来读取文件,返回df
    3. df = pd.read_csv('../datas/data_set/1960-2019全球GDP数据.csv', encoding='gbk')
    4. df3 = df.tail()
    5. print(df3)
    6. df4 = df3.loc[:, ['GDP']]
    7. print(df4)

     4.iloc通过行列下标获取子集

    • df.iloc[]通过行下标(索引下标、行序号)、列下标获取子集  
    1.行号取1行df.iloc[row_n]
    1. import pandas as pd
    2. # 加载csv数据,指定gbk编码格式来读取文件,返回df
    3. df = pd.read_csv('../datas/data_set/1960-2019全球GDP数据.csv', encoding='gbk')
    4. df3 = df.tail() # 构造示例数据集
    5. print(df3)
    6. df4 = df3.iloc[1]
    7. print(df4)
    2.行号取多行df.iloc[[row_1,row_2,…]]
    1. import pandas as pd
    2. # 加载csv数据,指定gbk编码格式来读取文件,返回df
    3. df = pd.read_csv('../datas/data_set/1960-2019全球GDP数据.csv', encoding='gbk')
    4. df3 = df.tail() # 构造示例数据集
    5. print(df3)
    6. df4 = df3.iloc[[1, 3]]
    7. print(df4)
    3.行号下标切片取多行df.iloc[start:end:step] 左闭右开
    1. import pandas as pd
    2. # 加载csv数据,指定gbk编码格式来读取文件,返回df
    3. df = pd.read_csv('../datas/data_set/1960-2019全球GDP数据.csv', encoding='gbk')
    4. df3 = df.tail() # 构造示例数据集
    5. print(df3)
    6. df4 = df3.iloc[:2]
    7. print(df4)
    8. df5 = df3[:2]
    9. print(df5)
    10. # 上述代码不同于
    11. df6 = df.loc[:2] # 索引值从0到2的所有行 df.loc[start_index_value:end_index_value:step]
    12. print(df6)
    4.行列下标切片取子集
    • df.iloc[row_index_start:row_index_stop:row_step,col_index_start:col_index_stop:col_step]

    1. import pandas as pd
    2. # 加载csv数据,指定gbk编码格式来读取文件,返回df
    3. df = pd.read_csv('../datas/data_set/1960-2019全球GDP数据.csv', encoding='gbk')
    4. df3 = df.tail() # 构造示例数据集
    5. print(df3)
    6. # 第0行到第4行,每2行选第1行;所有列,每2列取第1列
    7. df4 = df3.iloc[0:5:2, ::2]
    8. print(df4)
    5.行下标切片和列下标取子集
    • df.iloc[row_index_start:row_index_stop:row_step,[column_1,column_2…]]

    1. import pandas as pd
    2. # 加载csv数据,指定gbk编码格式来读取文件,返回df
    3. df = pd.read_csv('../datas/data_set/1960-2019全球GDP数据.csv', encoding='gbk')
    4. df3 = df.tail() # 构造示例数据集
    5. print(df3)
    6. # 第0行到第4行,每2行选第1行;所有列,每2列取第1列
    7. df4 = df3.iloc[0:5:2, [0, 2]]
    8. print(df4)
    6.行下标和列下标取子集
    • df.iloc[[row_1,row_2,…],[column_1,column_2…]]

    1. import pandas as pd
    2. # 加载csv数据,指定gbk编码格式来读取文件,返回df
    3. df = pd.read_csv('../datas/data_set/1960-2019全球GDP数据.csv', encoding='gbk')
    4. df3 = df.tail() # 构造示例数据集
    5. print(df3)
    6. df4 = df3.iloc[[0, 2, 4], [0, 2]]
    7. print(df4)
    7.行下标和列下标切片取子集
    1. import pandas as pd
    2. # 加载csv数据,指定gbk编码格式来读取文件,返回df
    3. df = pd.read_csv('../datas/data_set/1960-2019全球GDP数据.csv', encoding='gbk')
    4. df3 = df.tail() # 构造示例数据集
    5. print(df3)
    6. df4 = df3.iloc[[0, 2, 4], ::2]
    7. print(df4)

    5.查询函数获取子集df.query()

    • df.query(判断表达式)可以依据判断表达式返回的符合条件的df子集

    • df[布尔值向量]效果相同

    • 特别注意df.query()中传入的字符串格式

    1. import pandas as pd
    2. # 加载csv数据,指定gbk编码格式来读取文件,返回df
    3. df = pd.read_csv('../datas/data_set/1960-2019全球GDP数据.csv', encoding='gbk')
    4. df3 = df.tail() # 构造示例数据集
    5. print(df3)
    6. df4 = df3.query('country=="帕劳"')
    7. print(df4)
    8. df5 = df3[df3['country'] == '帕劳']
    9. print(df5)
    • 查询中国、美国、日本三国2015年至2019年的数据

    1. import pandas as pd
    2. # 加载csv数据,指定gbk编码格式来读取文件,返回df
    3. df = pd.read_csv('../datas/data_set/1960-2019全球GDP数据.csv', encoding='gbk')
    4. df1 = df.query('country=="中国" or country=="日本" or country=="美国"').query('year in [2015, 2016, 2017, 2018, 2019]')
    5. print(df1)
    6. df2 = df.query('(country=="中国" or country=="日本" or country=="美国") and year in [2015, 2016, 2017, 2018, 2019]')
    7. print(df2)

    6.判断是否存在某个值isin函数

    • df.isin(['x', 'y',...]) 返回由布尔值构成新的df,原df中存在x或y的位置为True,不是x或y的为False

    1. import pandas as pd
    2. # 加载csv数据,指定gbk编码格式来读取文件,返回df
    3. df = pd.read_csv('../datas/data_set/1960-2019全球GDP数据.csv', encoding='gbk')
    4. df3 = df.tail() # 构造示例数据集
    5. print(df3)
    6. df4 = df3.isin(['帕劳'])
    7. print(df4)
    8. df5 = df3.isin(['帕劳', '瑙鲁'])
    9. print(df5)
    • Serires对象使用isin函数返回新的s对象,其他完全相同

    1. import pandas as pd
    2. # 加载csv数据,指定gbk编码格式来读取文件,返回df
    3. df = pd.read_csv('../datas/data_set/1960-2019全球GDP数据.csv', encoding='gbk')
    4. df3 = df.tail() # 构造示例数据集
    5. print(df3)
    6. df4 = df3['country'].isin(['帕劳'])
    7. print(df4)
    8. df5 = df3['country'].isin(['帕劳', '瑙鲁'])
    9. print(df5)

     7.总结

    子集操作方法方法说明
    df.head(n)获取前n行数据,默认5行
    df.tail(n)获取最后n行数据,默认5行
    df[col_name] 或 df.col_name获取一列数据
    df[[col_name1,col_name2,...]]获取多列数据
    df[布尔值向量]df[[True, False, ...]]取出对应为True的数据行
    df[start:stop:step]行下标(索引下标)切片获取数据行
    df.loc[row_name]索引值(行名)获取1行数据
    df.loc[[row_name1,row_name2...]]索引值(行名)获取多行数据
    df.loc[start_index_value:end_index_value:step]索引值切片获取多行数据,注意与df[start:stop:step]不同
    df.loc[布尔值向量]布尔值向量获取行数据,等同于df[布尔值向量]
    df.loc[布尔值向量,[col_name1,col_name2…]]布尔值向量取行再配合列名取子集
    df.loc[[cow_name1,cow_name2...],[col_name1,col_name2…]]索引值取行再配合列名取子集
    df.loc[:,[col_name1,col_name2…]列名取子集
    df.iloc[row_n]行号取1行
    df.iloc[[row_1,row_2,…]]行号取多行
    df.iloc[start:end:step]行号下标切片取多行
    df.iloc[row_index_start:row_index_stop:row_step, col_index_start:col_index_stop:col_step]行列下标切片取子集
    df.iloc[row_index_start:row_index_stop:row_step,[column_1,column_2…]]行下标切片和列下标取子集
    df.iloc[[row_1,row_2,…],[column_1,column_2…]]行下标和列下标取子集
    df.iloc[[row_1,row_2,…],col_index_start:col_index_stop:col_step]行下标和列下标切片取子集
    df.query('判断表达式字符串')df[布尔值向量]效果相同依据判断表达式返回的符合条件的df子集
    df.isin(['value1', 'value2', ...])判断是否存在某个值
    • loc和iloc的区别:

      • loc是根据行列名获取子集

      • iloc是根据下标获取子集  

    8.项目地址:

    Python: 66666666666666 - Gitee.com

     

  • 相关阅读:
    【重点文章】服务升级惨痛教训
    Python中Lambda用法
    Workfine新手入门:分级预览
    Mysql —— 子查询的 ”必备“ 练习
    基于低代码平台开发的督办系统为企业管理赋能
    nacos集群配置(超完整)
    Spring Security验证码配置化开发
    企业电子招投标采购系统——功能模块&功能描述+数字化采购管理 采购招投标
    手把手教学Docker,内容通俗易懂,别说你看不懂
    一个简单的HTML 个人网页
  • 原文地址:https://blog.csdn.net/qq_56444564/article/details/134268067