[黑马程序员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()
import pandas as pd

# 加载csv数据,指定gbk编码格式来读取文件,返回df
df = pd.read_csv('../datas/data_set/1960-2019全球GDP数据.csv', encoding='gbk')

# 默认取前5行数据
print(df.head())
# 前10行
print(df.head(10))
默认获取倒数5行df.tail()
import pandas as pd

# 加载csv数据,指定gbk编码格式来读取文件,返回df
df = pd.read_csv('../datas/data_set/1960-2019全球GDP数据.csv', encoding='gbk')

# 默认取后5行数据
print(df.tail())
# 倒数15行
df2 = df.tail(15)
print(df2)
2.获取一列或多列数据
获取一列数据df[col_name]等同于df.col_name
import pandas as pd

# 加载csv数据,指定gbk编码格式来读取文件,返回df
df = pd.read_csv('../datas/data_set/1960-2019全球GDP数据.csv', encoding='gbk')
df2 = df.tail(15)

print(df2['country'])
# print(df2.country)
# 注意!如果列名字符串中间有空格的,只能使用df['country']这种形式
获取多列数据df[[col_name1,col_name2,...]]
import pandas as pd

# 加载csv数据,指定gbk编码格式来读取文件,返回df
df = pd.read_csv('../datas/data_set/1960-2019全球GDP数据.csv', encoding='gbk')
df2 = df.tail(15)

# 返回新的df
print(df2[['country', 'GDP']])
3.布尔值向量获取数据行 
  • 布尔值向量:完全由布尔值组成的一维数据,布尔值向量形式为

    • 布尔值构成的列表

    • 布尔值构成的series

    • 布尔值构成的numpy.ndarray

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

布尔值列表取出对应为True的数据行
import pandas as pd

# 加载csv数据,指定gbk编码格式来读取文件,返回df
df = pd.read_csv('../datas/data_set/1960-2019全球GDP数据.csv', encoding='gbk')
df3 = df.tail()
print(df3)
print(df3[[False, True, False, False, False]])
布尔值构成的Series取出对应为True的数据行
import pandas as pd

# 加载csv数据,指定gbk编码格式来读取文件,返回df
df = pd.read_csv('../datas/data_set/1960-2019全球GDP数据.csv', encoding='gbk')
df3 = df.tail()

# df3['country']=='帕劳'
# 返回布尔值构成的series对象
print(df3)
print(df3[df3['country'] == '帕劳'])
布尔值构成的ndarray取出对应为True的数据行
import numpy as np
import pandas as pd

# 加载csv数据,指定gbk编码格式来读取文件,返回df
df = pd.read_csv('../datas/data_set/1960-2019全球GDP数据.csv', encoding='gbk')
n1 = np.array([False, True, False, False, False])

df3 = df.tail()

print(df3)
print(df3[n1])
4.索引下标切片取行df[start:stop:step]
  • df[start:stop:step] == df[起始行下标:结束行下标:步长] , 遵循左闭右开原则(包含起始行,不包含结束行),步长默认为1
import pandas as pd

# 加载csv数据,指定gbk编码格式来读取文件,返回df
df = pd.read_csv('../datas/data_set/1960-2019全球GDP数据.csv', encoding='gbk')

df4 = df.head(10)  # 取原df前10行数据作为df4,默认自增索引由0到9
print(df4)

df5 = df4[0:3]  # 取前3行
print(df5)

df6 = df4[:5:2]  # 取前5行,步长为2
print(df6)

df7 = df4[1::3]  # 取第2行到最后所有行,步长为3
print(df7)

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

  • df.loc[]通过行名(索引值、索引名)、列名获取子集
1.索引值获取1行数据df.loc[row_name]
import pandas as pd

# 加载csv数据,指定gbk编码格式来读取文件,返回df
df = pd.read_csv('../datas/data_set/1960-2019全球GDP数据.csv', encoding='gbk')

df4 = df.head(10)  # 取原df前10行数据作为df4,默认自增索引由0到9
print(df4)

df5 = df4.loc[2]  # 获取索引为2的一行数据
print(df5)
2.索引值获取多行数据df.loc[[row_name1,row_name2...]]
import pandas as pd

# 加载csv数据,指定gbk编码格式来读取文件,返回df
df = pd.read_csv('../datas/data_set/1960-2019全球GDP数据.csv', encoding='gbk')

df4 = df.head(10)  # 取原df前10行数据作为df4,默认自增索引由0到9
print(df4)

df5 = df4.loc[[0, 2]]  # 获取索引为0和2的数据,返回df
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]

import pandas as pd

# 加载csv数据,指定gbk编码格式来读取文件,返回df
df = pd.read_csv('../datas/data_set/1960-2019全球GDP数据.csv', encoding='gbk')

df4 = df.head(10)  # 取原df前10行数据作为df4,默认自增索引由0到9
print(df4)

df5 = df4.loc[:5:2]  # 表示获取索引值0到5,每2行取一行
print(df5)

df6 = df4[:5:2]  # 等同于df4.iloc[:5:2]
print(df6)
4.布尔值向量获取行数据df.loc[布尔值向量]
  • df.loc[[bool1,bool2,…]] 等同于 df[[bool1,bool2,…]]

import pandas as pd
import numpy as np

# 加载csv数据,指定gbk编码格式来读取文件,返回df
df = pd.read_csv('../datas/data_set/1960-2019全球GDP数据.csv', encoding='gbk')

df3 = df.tail()
print(df3)

df4 = df3.loc[[False, True, False, False, False]]
print(df4)

df5 = df3.loc[df3['country'] == '帕劳']
print(df5)

n1 = np.array([False, True, False, False, False])
df6 = df3.loc[n1]
print(df6)
5.布尔值向量取行再配合列名取子集df.loc[布尔值向量,[col_name1,col_name2…]]
import pandas as pd

# 加载csv数据,指定gbk编码格式来读取文件,返回df
df = pd.read_csv('../datas/data_set/1960-2019全球GDP数据.csv', encoding='gbk')

df3 = df.tail()
print(df3)

df4 = df3.loc[df3['country'] == '帕劳', ['country', 'GDP']]
print(df4)
6.索引值取行再配合列名取子集df.loc[[cow_name1,cow_name2...],[col_name1,col_name2…]]
import pandas as pd

# 加载csv数据,指定gbk编码格式来读取文件,返回df
df = pd.read_csv('../datas/data_set/1960-2019全球GDP数据.csv', encoding='gbk')

df3 = df.tail()
print(df3)

df4 = df3.loc[[9926], ['country', 'GDP']]
print(df4)
7.列名取子集df.loc[:,[col_name1,col_name2…]
import pandas as pd

# 加载csv数据,指定gbk编码格式来读取文件,返回df
df = pd.read_csv('../datas/data_set/1960-2019全球GDP数据.csv', encoding='gbk')

df3 = df.tail()
print(df3)

df4 = df3.loc[:, ['GDP']]
print(df4)

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

  • df.iloc[]通过行下标(索引下标、行序号)、列下标获取子集  
1.行号取1行df.iloc[row_n]
import pandas as pd

# 加载csv数据,指定gbk编码格式来读取文件,返回df
df = pd.read_csv('../datas/data_set/1960-2019全球GDP数据.csv', encoding='gbk')

df3 = df.tail()  # 构造示例数据集
print(df3)

df4 = df3.iloc[1]
print(df4)
2.行号取多行df.iloc[[row_1,row_2,…]]
import pandas as pd

# 加载csv数据,指定gbk编码格式来读取文件,返回df
df = pd.read_csv('../datas/data_set/1960-2019全球GDP数据.csv', encoding='gbk')
df3 = df.tail()  # 构造示例数据集
print(df3)

df4 = df3.iloc[[1, 3]]
print(df4)
3.行号下标切片取多行df.iloc[start:end:step] 左闭右开
import pandas as pd

# 加载csv数据,指定gbk编码格式来读取文件,返回df
df = pd.read_csv('../datas/data_set/1960-2019全球GDP数据.csv', encoding='gbk')
df3 = df.tail()  # 构造示例数据集
print(df3)

df4 = df3.iloc[:2]
print(df4)

df5 = df3[:2]
print(df5)

# 上述代码不同于
df6 = df.loc[:2]  # 索引值从0到2的所有行 df.loc[start_index_value:end_index_value:step]
print(df6)
4.行列下标切片取子集
  • df.iloc[row_index_start:row_index_stop:row_step,col_index_start:col_index_stop:col_step]

import pandas as pd

# 加载csv数据,指定gbk编码格式来读取文件,返回df
df = pd.read_csv('../datas/data_set/1960-2019全球GDP数据.csv', encoding='gbk')
df3 = df.tail()  # 构造示例数据集
print(df3)

# 第0行到第4行,每2行选第1行;所有列,每2列取第1列
df4 = df3.iloc[0:5:2, ::2]
print(df4)
5.行下标切片和列下标取子集
  • df.iloc[row_index_start:row_index_stop:row_step,[column_1,column_2…]]

import pandas as pd

# 加载csv数据,指定gbk编码格式来读取文件,返回df
df = pd.read_csv('../datas/data_set/1960-2019全球GDP数据.csv', encoding='gbk')
df3 = df.tail()  # 构造示例数据集
print(df3)

# 第0行到第4行,每2行选第1行;所有列,每2列取第1列
df4 = df3.iloc[0:5:2, [0, 2]]
print(df4)
6.行下标和列下标取子集
  • df.iloc[[row_1,row_2,…],[column_1,column_2…]]

import pandas as pd

# 加载csv数据,指定gbk编码格式来读取文件,返回df
df = pd.read_csv('../datas/data_set/1960-2019全球GDP数据.csv', encoding='gbk')
df3 = df.tail()  # 构造示例数据集
print(df3)

df4 = df3.iloc[[0, 2, 4], [0, 2]]
print(df4)
7.行下标和列下标切片取子集
import pandas as pd

# 加载csv数据,指定gbk编码格式来读取文件,返回df
df = pd.read_csv('../datas/data_set/1960-2019全球GDP数据.csv', encoding='gbk')
df3 = df.tail()  # 构造示例数据集
print(df3)

df4 = df3.iloc[[0, 2, 4], ::2]
print(df4)

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

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

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

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

import pandas as pd

# 加载csv数据,指定gbk编码格式来读取文件,返回df
df = pd.read_csv('../datas/data_set/1960-2019全球GDP数据.csv', encoding='gbk')
df3 = df.tail()  # 构造示例数据集
print(df3)

df4 = df3.query('country=="帕劳"')
print(df4)

df5 = df3[df3['country'] == '帕劳']
print(df5)
  • 查询中国、美国、日本三国2015年至2019年的数据

import pandas as pd

# 加载csv数据,指定gbk编码格式来读取文件,返回df
df = pd.read_csv('../datas/data_set/1960-2019全球GDP数据.csv', encoding='gbk')

df1 = df.query('country=="中国" or country=="日本" or country=="美国"').query('year in [2015, 2016, 2017, 2018, 2019]')
print(df1)

df2 = df.query('(country=="中国" or country=="日本" or country=="美国") and year in [2015, 2016, 2017, 2018, 2019]')
print(df2)

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

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

import pandas as pd

# 加载csv数据,指定gbk编码格式来读取文件,返回df
df = pd.read_csv('../datas/data_set/1960-2019全球GDP数据.csv', encoding='gbk')
df3 = df.tail()  # 构造示例数据集
print(df3)

df4 = df3.isin(['帕劳'])
print(df4)

df5 = df3.isin(['帕劳', '瑙鲁'])
print(df5)
  • Serires对象使用isin函数返回新的s对象,其他完全相同

import pandas as pd

# 加载csv数据,指定gbk编码格式来读取文件,返回df
df = pd.read_csv('../datas/data_set/1960-2019全球GDP数据.csv', encoding='gbk')
df3 = df.tail()  # 构造示例数据集
print(df3)

df4 = df3['country'].isin(['帕劳'])
print(df4)

df5 = df3['country'].isin(['帕劳', '瑙鲁'])
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

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿瞒有我良计15

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值