Python数据分析-数据抽取-DataFrame 的loc和iloc用法
1. 主要内容
- 抽取一行数据
- 抽取多行数据
- 抽取指定列数据
- 抽取指定行、列数据
- 按指定条件抽取数据
声明:该笔记来源于笔者上课学习笔记。以一个实例来解释用法
API 补充:
-
pandas.DataFrame.loc
该方法主要基于标签,但也可以与布尔数组一起使用。
可支持输入参数:
-
- 单独一个标签,如 5 或者 'a' (注意:5 被解释为索引的标签,而不是索引所代表的整数位置。)
- 标签列表,如 ['a', 'b', 'c']
- 带有标签的切片对象,如 'a' : 'f' (此切片与通常的python的切片不同,开始和停止都包含在内)
官方解释补充:

代码示例:
1 df = pd.DataFrame([[1, 2], [4, 5], [7, 8]], index=['cobra', 'viper', 'sidewinder'], columns=['max_speed', 'shield']) 2 print(df) 3 print("单一标签,将作为Series返回:") 4 df1 = df.loc['viper'] 5 print(df1) 6 df2 = df.loc[['viper', 'sidewinder']] 7 print(df2) 8 ### 结果 9 max_speed shield 10 cobra 1 2 11 viper 4 5 12 sidewinder 7 8 13 单一标签,将作为Series返回: 14 max_speed 4 15 shield 5 16 Name: viper, dtype: int64
标签列表,将作为DataFrame返回
1 df.loc[['viper', 'sidewinder']] 2 3 ### 结果 4 max_speed shield 5 viper 4 5 6 sidewinder 7 8
行和列的单一标签
1 df.loc['cobra', 'shield'] 2 3 ### 结果 4 2
切片索引(开始和停止都包含在内)
1 df.loc['cobra':'viper', 'max_speed'] 2 3 ### 结果 4 cobra 1 5 viper 4 6 Name: max_speed, dtype: int64
与行轴长度相同的布尔列表
1 df.loc[[False, False, True]] 2 3 ### 结果 4 max_speed shield 5 sidewinder 7 8
可对齐布尔级数
1 df.loc[pd.Series([False, True, False], index=['viper', 'sidewinder', 'cobra'])] 2 3 ### 结果 4 max_speed shield 5 sidewinder 7 8
Index(与df.reindex效果相同)
1 df.loc[pd.Index(["cobra", "viper"], name="foo")] 2 3 ### 结果 4 max_speed shield 5 foo 6 cobra 1 2 7 viper 4 5
返回一个布尔系列的条件(与下第7点一样,根据条件提取数据)
1 df.loc[df['shield'] > 6] 2 3 ### 结果 4 max_speed shield 5 sidewinder 7 8
1 df.loc[df['shield'] > 6, ['max_speed']] 2 3 ### 结果 4 max_speed 5 sidewinder 7
1 f.loc[(df['max_speed'] > 1) & (df['shield'] < 8)] 2 3 ### 结果 4 max_speed shield 5 viper 4 5
1 df.loc[(df['max_speed'] > 4) | (df['shield'] < 5)] 2 3 ### 结果 4 max_speed shield 5 cobra 1 2 6 sidewinder 7 8
-
pandas.DataFrame.iloc
用于按位置选择的整数位置索引。 从(0到轴的长度-1),但也可以与布尔数组一起使用。
可支持输入参数:
-
- 一个整数 5
- 一个整数列表 [4, 3, 0]
- 整数切片 1:7
- bool列表
- 具有一个参数(调用Series或DataFrame)的可调用函数,并返回用于索引的有效输出(上述之一)
- 由行和列索引组成的元组,元组元素由上述输入之一组成 (0, 1)
- 注意:该函数如果在索引越界的时候会引发
IndexError异常
代码示例:
操作数据表,由字典转成DataFrame
1 mydict = [{'a': 1, 'b': 2, 'c': 3, 'd': 4}, 2 {'a': 100, 'b': 200, 'c': 300, 'd': 400}, 3 {'a': 1000, 'b': 2000, 'c': 3000, 'd': 4000}] 4 df = pd.DataFrame(mydict)
整数索引
1 df.iloc[0] 2 3 ### 结果 4 a 1 5 b 2 6 c 3 7 d 4 8 Name: 0, dtype: int64
整数列表索引
df.iloc[[0]] ### 结果 a b c d 0 1 2 3 4 ########### df.iloc[[0, 1]] ### 结果 a b c d 0 1 2 3 4 1 100 200 300 400
切片索引
1 df.iloc[:3] 2 3 ### 结果 4 a b c d 5 0 1 2 3 4 6 1 100 200 300 400 7 2 1000 2000 3000 4000
可对齐布尔级数
1 df.iloc[[True, False, True]] 2 3 ### 结果 4 a b c d 5 0 1 2 3 4 6 2 1000 2000 3000 4000
可调用函数
1 df.iloc[lambda x: x.index % 2 == 0] 2 3 ### 结果 4 a b c d 5 0 1 2 3 4 6 2 1000 2000 3000 4000
两轴分度作为参数传入
1 df.iloc[0, 1] 2 3 ### 结果 4 2
1 df.iloc[[0, 2], [1, 3]] 2 3 ### 结果 4 b d 5 0 2 4 6 2 2000 4000
1 df.iloc[1:3, 0:3] 2 3 ### 结果 4 a b c 5 1 100 200 300 6 2 1000 2000 3000
1 df.iloc[:, [True, False, True, False]] 2 3 ### 结果 4 a c 5 0 1 3 6 1 100 300 7 2 1000 3000
1 df.iloc[:, lambda df: [0, 2]] 2 3 ### 结果 4 a c 5 0 1 3 6 1 100 300 7 2 1000 3000
2. 操作数据导入
1 import pandas as pd 2 pd.set_option('display.unicode.east_asian_width', True) 3 4 data = [[110, 105, 99], [105, 88, 115], [109, 120, 130], [112, 115, 140]] 5 name = ['明月', '七月流火', '高袁圆', ' 二月二'] 6 columns = ['语文', '数学', '英语'] 7 df=pd.DataFrame(data=data,index=name, columns=columns) 8 print(df.shape) 9 print(df)
3. 取某一行某一列的特定值
1 df.loc[1,2] # 必须用索引名称,如果没有重写,就可以用数字索引 2 df.iloc[1,2] # iloc必须用索引位置编号,可用于循环遍历,因为用数字索引
4. 同时取某几行,某几列
先写行,再写列
区别于以上的方法:需要用[ ]将多个索引值做成list
1 df.loc[['七月流火'],['数学','英语']] 2 df.iloc[1, [1, 2]]
5. 提取一整行数据
1 df.loc[‘高袁圆’,’语文’:’英语’] 2 df.loc[‘高袁圆’,:] #'高袁圆'的所有成绩 3 df.loc[‘高袁圆’] 4 df.iloc[[1, 3]] # 只找第1和3行的所有数据
6. 获取一整列或几列
1 df.iloc[: ,[0,2]] # 0和2列的所有行 2 3 df[‘语文’] # 全班语文成绩 ----〉 提取一整列 4 df[[‘语文’, ‘英语’]] # 全班语文和英语成绩 ----〉 提取多列 5 # 丄 同时提取多个行,省略第二个参数,第一个参数要用[ ]做成list
7. 提高
loc 除了根据行索引和列索引来提取数据,还可以根据条件表达式来提取。
1 df.loc[df['语文'] > 105]
时间:2024年2月1日(初稿)
时间:2024年2月2日(修改)

Python数据分析-数据抽取-DataFrame 的loc和iloc用法
浙公网安备 33010602011771号