pandas 遍历行

pandas 遍历行

pandas 遍历行

在数据处理和分析中,pandas 是一个经常使用的库。它提供了强大的数据结构和数据分析工具,方便用户对数据进行操作和分析。在进行数据处理的过程中,我们经常需要对 DataFrame 的每一行进行遍历,以进行特定的操作。本文将详细讲解如何在 pandas 中遍历行。

1. pandas 中的数据结构

在 pandas 中,两个主要的数据结构是 Series 和 DataFrame。

1.1 Series

Series 是一维的数据结构,类似于带标签的数组。它可以存储任意类型的数据,并且每个元素都可以通过 index 访问。下面是创建 Series 的示例代码:

import pandas as pd

data = [1, 2, 3, 4, 5]
index = ['a', 'b', 'c', 'd', 'e']
s = pd.Series(data, index=index)

1.2 DataFrame

DataFrame 是二维的数据结构,可以看做是由多个 Series 组成的表格。每个列可以有不同的数据类型(int、float、string 等),并且每个列都可以有自己的名称。下面是创建 DataFrame 的示例代码:

import pandas as pd

data = {'Name': ['Tom', 'Nick', 'John', 'Alice'],
        'Age': [25, 30, 21, 28],
        'Score': [80, 90, 85, 95]}
df = pd.DataFrame(data)

2. 遍历行的方法

在 pandas 中,有多种方法可以遍历 DataFrame 的每一行。下面将详细介绍这些方法,并给出相应的示例代码。

2.1 iterrows 方法

iterrows 是一个可以遍历 DataFrame 行的生成器。它返回一个迭代器,其中每个元素都是一个包含两个值的元组:行索引和包含该行数据的 Series。下面是使用 iterrows 方法遍历行的示例代码:

import pandas as pd

data = {'Name': ['Tom', 'Nick', 'John', 'Alice'],
        'Age': [25, 30, 21, 28],
        'Score': [80, 90, 85, 95]}
df = pd.DataFrame(data)

for index, row in df.iterrows():
    print(index, row)

运行结果如下:

0 Name     Tom
Age       25
Score     80
Name: 0, dtype: object
1 Name    Nick
Age       30
Score     90
Name: 1, dtype: object
2 Name    John
Age       21
Score     85
Name: 2, dtype: object
3 Name    Alice
Age        28
Score      95
Name: 3, dtype: object

2.2 itertuples 方法

itertuples 方法是一个可以遍历 DataFrame 行的生成器,返回的是一个具有命名元组的迭代器。这个方法比 iterrows 快得多,并且在大型数据集上性能更好。下面是使用 itertuples 方法遍历行的示例代码:

import pandas as pd

data = {'Name': ['Tom', 'Nick', 'John', 'Alice'],
        'Age': [25, 30, 21, 28],
        'Score': [80, 90, 85, 95]}
df = pd.DataFrame(data)

for row in df.itertuples(index=False):
    print(row)

运行结果如下:

('Tom', 25, 80)
('Nick', 30, 90)
('John', 21, 85)
('Alice', 28, 95)

2.3 apply 方法

apply 方法是 pandas 中另一个常用的方法,它可以对每一行应用指定的函数。下面是使用 apply 方法遍历行的示例代码:

import pandas as pd

data = {'Name': ['Tom', 'Nick', 'John', 'Alice'],
        'Age': [25, 30, 21, 28],
        'Score': [80, 90, 85, 95]}
df = pd.DataFrame(data)

def process_row(row):
    # 在这里处理每一行的数据
    print(row)

df.apply(process_row, axis=1)

运行结果如下:

Name     Tom
Age       25
Score     80
dtype: object
Name    Nick
Age       30
Score     90
dtype: object
Name    John
Age       21
Score     85
dtype: object
Name    Alice
Age        28
Score      95
dtype: object

这里需要注意的是,apply 方法需要指定 axis=1,以便按行应用函数。

2.4 iterrows 和 apply 的性能比较

在使用 pandas 遍历行时,使用 iterrows 方法和 apply 方法是两种常见的选择。但是需要注意的是,iterrows 方法返回的是一个元组,而 apply 方法返回的是一个 Series 对象。

为了比较这两种方法的性能,我们可以使用 time 模块来进行测试。下面是示例代码:

import pandas as pd
import time

data = {'Name': ['Tom', 'Nick', 'John', 'Alice'],
        'Age': [25, 30, 21, 28],
        'Score': [80, 90, 85, 95]}
df = pd.DataFrame(data)


start_time = time.time()
for index, row in df.iterrows():
    pass
end_time = time.time()
print("iterrows 方法耗时:", end_time - start_time)


start_time = time.time()
df.apply(lambda row: None, axis=1)
end_time = time.time()
print("apply 方法耗时:", end_time - start_time)

运行结果如下:

iterrows 方法耗时: 0.004693031311035156
apply 方法耗时: 0.00032258033752441406

从运行结果可以看出,apply 方法的耗时更短,更加高效。

3. 总结

本文介绍了在 pandas 中遍历行的几种方法,包括使用 iterrows 和 itertuples 方法遍历行,以及使用 apply 方法对每一行应用函数。其中,apply 方法的性能更好,更加高效。在实际的数据处理和分析中,根据具体的情况选择合适的遍历方法,可以提高代码的运行效率。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程