Pandas 如何在DataFrame中迭代行
在本文中,我们将介绍如何使用Pandas来迭代DataFrame中的行。作为数据科学家,我们常常需要在DataFrame中进行某些行级别的操作,如对每行数据进行计算、过滤、预处理等等操作,而我们需要一种快速且高效的方法来迭代DataFrame中的所有行。
阅读更多:Pandas 教程
使用iterrows方法迭代行
Pandas提供了许多方法来迭代DataFrame中的行,其中最常用的一种方法是使用iterrows方法。iterrows方法可以让我们逐行地迭代DataFrame,并将每一行数据转换为一个元组。下面我们先通过一个简单的例子来了解iterrows方法:
import pandas as pd # 创建一个DataFrame对象 data = [['Alex', 10], ['Bob', 12], ['Clarke', 13]] df = pd.DataFrame(data, columns=['Name', 'Age']) # 使用iterrows方法迭代DataFrame中的行 for index, row in df.iterrows(): print(row['Name'], row['Age'])
Python
输出结果如下:
Alex 10 Bob 12 Clarke 13
Python
从上述代码可以看出,我们首先使用pandas的DataFrame对象创建了一个简单的数据集,然后使用iterrows方法迭代了每一行数据,并将每一行数据转换为一个元组(即index, row)。我们可以通过元组来访问每一行数据中的每一列。
值得注意的是,在使用iterrows方法迭代DataFrame时,它会返回行索引和包含行数据的Series对象,而不是原始的DataFrame对象。因此,如果需要修改DataFrame中的值或者对整个DataFrame进行操作,则需要使用pandas的at或iat属性来操作。
使用itertuples方法迭代行
除了iterrows方法之外,Pandas还提供了另外一种迭代方法,即itertuples方法。与iterrows方法不同的是,itertuples方法返回的是一个包含每一行数据的命名元组,而不是包含每一行数据的Series对象,这使得itertuples方法比iterrows方法更适合用于高性能计算。
下面我们通过一个简单的例子来了解itertuples方法:
import pandas as pd # 创建一个DataFrame对象 data = [['Alex', 10], ['Bob', 12], ['Clarke', 13]] df = pd.DataFrame(data, columns=['Name', 'Age']) # 使用itertuples方法迭代DataFrame中的行 for row in df.itertuples(): print(row.Name, row.Age)
Python
输出结果如下:
Alex 10 Bob 12 Clarke 13
Python
从上述代码可以看出,我们首先使用pandas的DataFrame对象创建了一个简单的数据集,然后使用itertuples方法迭代了每一行数据,并将每一行数据转换为一个命名元组。我们可以通过命名元组来访问每一行数据中的每一列。
使用apply方法迭代行
除了使用iterrows方法和itertuples方法迭代DataFrame中的行之外,我们还可以使用apply方法来迭代行。apply方法是Pandas中的一个非常实用的函数,它可以对每一行数据进行自定义处理,并将处理结果逐一返回。下面我们通过一个简单的例子来了解apply方法:
import pandas as pd # 创建一个DataFrame对象 data = [['Alex', 10], ['Bob', 12], ['Clarke', 13]] df = pd.DataFrame(data, columns=['Name', 'Age']) # 使用apply方法迭代DataFrame中的行 def func(row): if row['Age'] > 10: return 'Yes' else: return 'No' df['is_adult'] = df.apply(func, axis=1) print(df)
Python
输出结果如下:
Name Age is_adult 0 Alex 10 No 1 Bob 12 Yes 2 Clarke 13 Yes
Python
从上述代码可以看出,我们首先使用pandas的DataFrame对象创建了一个简单的数据集,然后使用apply方法对每一行数据进行处理,并将处理结果新增为一个新的列is_adult。在apply方法中,我们定义了一个自定义函数func,该函数判断每一行数据中Age列的值是否大于10,如果大于10则返回’Yes’,否则返回’No’。然后使用df[‘is_adult’] = df.apply(func, axis=1)将处理结果添加为新的一列。
需要注意的是,apply方法的axis参数默认为0,表示按列进行处理,而axis=1表示按行进行处理,所以我们使用axis=1来对每一行数据进行自定义处理并返回处理结果。
总结
通过本文的介绍,我们了解了如何使用iterrows方法、itertuples方法和apply方法来迭代Pandas中的DataFrame中的行。iterrows方法和itertuples方法返回的分别是包含每一行数据的Series对象和命名元组,而apply方法则允许我们对每一行数据进行自定义处理。在实际应用中,我们可以根据需求来选择使用合适的行迭代方法来处理DataFrame中的数据,并可以根据实际情况进行调整以达到最佳性能。