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'])
输出结果如下:
Alex 10
Bob 12
Clarke 13
从上述代码可以看出,我们首先使用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)
输出结果如下:
Alex 10
Bob 12
Clarke 13
从上述代码可以看出,我们首先使用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)
输出结果如下:
Name Age is_adult
0 Alex 10 No
1 Bob 12 Yes
2 Clarke 13 Yes
从上述代码可以看出,我们首先使用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中的数据,并可以根据实际情况进行调整以达到最佳性能。