Pandas中的loc和iloc使用指南

在Python数据科学领域,Pandas库因其强大的数据处理能力而广受欢迎。在Pandas中,loc和iloc是两个用于数据筛选和更新的重要函数。本文将通过实际代码示例,详细解释这两个函数的使用方法和区别。

Pandas库中的loc和iloc

Pandas库提供了多种数据筛选方法,其中loc和iloc是最常用的两种。它们可以帮助轻松地在Pandas DataFrame中进行数据选择。

loc和iloc的区别

loc是基于标签的,这意味着需要指定行和列的名称来筛选数据。例如,如果想要筛选索引名为1、2或100的行,使用loc函数时,只有当索引名确实是1、2或100时,才能得到结果。因此,即使数据集中的索引不是整数,也可以使用loc函数进行筛选。

与此相反,iloc是基于整数索引的。这意味着需要通过指定行和列的整数索引来筛选数据。例如,如果想要筛选索引为1、2或100的行,无论索引名是什么,iloc都会返回第1、2和100行的数据。

loc和iloc的实际应用

现在,让通过一些实际的Python代码示例,来了解如何使用loc和iloc进行数据选择和更新。

首先,需要一个数据集来应用loc和iloc。将创建一个包含5列的学生数据集——年龄、班级、城市、性别和最喜欢的颜色。这个数据集将包含数值和分类变量。

import pandas as pd import numpy as np data = pd.DataFrame({ 'age' : [10, 22, 13, 21, 12, 11, 17], 'section' : ['A', 'B', 'C', 'B', 'B', 'A', 'A'], 'city' : ['Gurgaon', 'Delhi', 'Mumbai', 'Delhi', 'Mumbai', 'Delhi', 'Mumbai'], 'gender' : ['M', 'F', 'F', 'M', 'M', 'M', 'F'], 'favourite_color' : ['red', np.NAN, 'yellow', np.NAN, 'black', 'green', 'red'] }) print(data)

在探索数据集时,经常需要根据给定条件筛选数据。例如,可能需要找到所有年龄大于x岁的行,或者城市为Delhi的行等。可以使用pandas.DataFrame.loc[]来解决这类查询,只需在loc语句中传递条件即可。

# 找到所有年龄大于或等于15岁的行 filtered_data = data.loc[data['age'] >= 15] print(filtered_data)

同样,也可以使用方法loc来根据多个条件筛选数据,例如找到所有年龄大于或等于12岁且性别为男性的行。

# 找到所有年龄大于或等于12岁且性别为男性的行 filtered_data = data.loc[(data['age'] >= 12) & (data['gender'] == 'M')] print(filtered_data)

使用loc,还可以在PandasDataFrame中选择特定范围的行。如果索引没有按顺序排列,它将只选择索引为1和3的行(如下例所示)。如果索引不是数字,则不能使用loc进行切片,而需要使用iloc函数。

# 使用loc选择索引为1和3的行 sliced_data = data.loc[[1, 3]] print(sliced_data)

还可以在loc语句中添加列的列表,以选择满足条件的行中的特定列。例如,如果数据集包含数百列,而只想查看其中的一些列,那么可以在loc语句中添加列的列表。

# 选择满足条件的行中的特定列 selected_columns = data.loc[data['age'] >= 12, ['age', 'section']] print(selected_columns)

这是PythonPandas中最喜欢的技巧之一!经常需要根据某个条件更新数据集中的值。例如,如果年龄大于或等于12岁,希望将班级列的值更新为“M”。

# 更新满足条件的行中特定列的值 data.loc[data['age'] >= 12, 'section'] = 'M' print(data)

如果想要更新多个列的不同值,可以使用以下语法。在这个例子中,如果年龄大于20岁,loc函数将更新班级列为“S”,城市列为Pune。

# 更新满足条件的行中多个列的值 data.loc[data['age'] > 20, ['section', 'city']] = ['S', 'Pune'] print(data)

当使用iloc时,需要通过整数索引指定行和列。如果只想选择第一行和第三行,只需要在iloc语句中将它们放入列表中。

# 使用iloc选择第一行和第三行 selected_rows = data.iloc[[0, 2]] print(selected_rows)

之前,使用loc函数从数据集中选择了几列。也可以使用iloc函数来实现这一点。需要注意的是,需要提供列的索引号而不是列名。

# 使用iloc选择特定索引的行和列 selected_rows_columns = data.iloc[[0, 2], [0, 1]] print(selected_rows_columns)

也可以使用方法iloc来切片DataFrame。需要提供起始索引和结束索引+1来切片给定的DataFrame。即使索引不是有序数字,它也会从起始索引行选择到结束索引。

# 使用iloc选择特定范围的行 range_rows = data.iloc[0:3] print(range_rows) # 使用iloc选择特定范围的行和列 range_rows_columns = data.iloc[1:3, 2:4] print(range_rows_columns)
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485