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