三、数据提取
1、按行提取
1.1 loc属性
以列名(columns)和行名(index)作为参数,当只有一个参数时,默认是行名,即抽取整行数据,包括所有列。
1.2 iloc属性
以行和列位置索引(即:0,1,2,…)作为参数,0表示第一行,1表示第二行,以此类推。
当只有一个参数时,默认是行索引,即抽取整行数据,包括所有列。
import pandas as pd pd.set_option('display.unicode.east_asian_width', True) data = [[45, 65, 100], [56, 45, 50], [67, 67, 67]] index = ['张三', '李四', '王五'] columns = ['数学', '语文', '英语'] df = pd.DataFrame(data=data, index=index, columns=columns) print(df) print('-------------------------') # 提取单行数据 print(df.loc['张三']) # 行索引名称 print(df.iloc[0]) # 行索引编号 print('-------------------------') # 提取多行数据 print(df.loc[['张三', '王五']]) print(df.iloc[[0, 2]]) print('-------------------------') # 提取连续多行数据 print(df.loc['张三':'王五']) # 行索引名称,包含王五 print(df.iloc[0:2]) # 行索引编号,不包含王五 print('-------------------------') # iloc[start:stop:step] print(df.iloc[1::]) # 起始为1,一直到末尾 print(df.iloc[::2]) # 起始为0,步长为2
数学 语文 英语 张三 45 65 100 李四 56 45 50 王五 67 67 67 ------------------------- 数学 45 语文 65 英语 100 Name: 张三, dtype: int64 数学 45 语文 65 英语 100 Name: 张三, dtype: int64 ------------------------- 数学 语文 英语 张三 45 65 100 王五 67 67 67 数学 语文 英语 张三 45 65 100 王五 67 67 67 ------------------------- 数学 语文 英语 张三 45 65 100 李四 56 45 50 王五 67 67 67 数学 语文 英语 张三 45 65 100 李四 56 45 50 ------------------------- 数学 语文 英语 李四 56 45 50 王五 67 67 67 数学 语文 英语 张三 45 65 100 王五 67 67 67
2、按列提取
import pandas as pd pd.set_option('display.unicode.east_asian_width', True) data = [[45, 65, 100], [56, 45, 50], [67, 67, 67]] index = ['张三', '李四', '王五'] columns = ['数学', '语文', '英语'] df = pd.DataFrame(data=data, index=index, columns=columns) print(df) print('-------------------------') # 直接使用列名提取 print(df[['数学', '英语']]) print('-------------------------') # 提取不连续的列 # [行, 列] # 提取:所有行的数学和英语 print(df.loc[:, ['数学', '英语']]) print(df.iloc[:, [0, 2]]) print('-------------------------') # 提取连续的列 print(df.loc[:, '语文':]) print(df.iloc[:, 1:])
数学 语文 英语 张三 45 65 100 李四 56 45 50 王五 67 67 67 ------------------------- 数学 英语 张三 45 100 李四 56 50 王五 67 67 ------------------------- 数学 英语 张三 45 100 李四 56 50 王五 67 67 数学 英语 张三 45 100 李四 56 50 王五 67 67 ------------------------- 语文 英语 张三 65 100 李四 45 50 王五 67 67 语文 英语 张三 65 100 李四 45 50 王五 67 67
3、提取区域数据
import pandas as pd pd.set_option('display.unicode.east_asian_width', True) data = [[45, 65, 100], [56, 45, 50], [67, 67, 67]] index = ['张三', '李四', '王五'] columns = ['数学', '语文', '英语'] df = pd.DataFrame(data=data, index=index, columns=columns) print(df) print('-------------------------') print(df.loc['张三', '数学'], type(df.loc['张三', '数学'])) print(df.iloc[0, 0], type(df.iloc[0, 0])) print('-------------------------') print(df.loc[['张三', '王五'], ['数学', '语文']]) print(df.iloc[[0, 2], [0, 2]]) print('-------------------------') # 区域数据连续 # [行切片, 列切片] print(df.loc['张三':'李四', '数学':'语文']) print(df.iloc[0:2, 0:2]) print('-------------------------') # 区域数据不连续 print(df.iloc[[0, 2], [0, 2]]) # 第0行,第2行;第0列,第2列 print('-------------------------') print(df.iloc[:, 0]) # 所有行的第0列
数学 语文 英语 张三 45 65 100 李四 56 45 50 王五 67 67 67 ------------------------- 45 <class 'numpy.int64'> 45 <class 'numpy.int64'> ------------------------- 数学 语文 张三 45 65 王五 67 67 数学 英语 张三 45 100 王五 67 67 ------------------------- 数学 语文 张三 45 65 李四 56 45 数学 语文 张三 45 65 李四 56 45 ------------------------- 数学 英语 张三 45 100 王五 67 67 ------------------------- 张三 45 李四 56 王五 67 Name: 数学, dtype: int64
4、提取指定条件数据
import pandas as pd pd.set_option('display.unicode.east_asian_width', True) data = [[45, 65, 100], [56, 45, 50], [67, 67, 67]] index = ['张三', '李四', '王五'] columns = ['数学', '语文', '英语'] df = pd.DataFrame(data=data, index=index, columns=columns) print(df) print('-------------------------') # 语文 >= 60 print(df.loc[df['语文'] >= 60]) print('-------------------------') # 语文 >= 60 数学 >= 60 # 多个关系使用关系运算符 print(df.loc[(df['语文'] >= 60) & (df['数学'] >= 60)])
数学 语文 英语 张三 45 65 100 李四 56 45 50 王五 67 67 67 ------------------------- 数学 语文 英语 张三 45 65 100 王五 67 67 67 ------------------------- 数学 语文 英语 王五 67 67 67