Python遍历pandas数据方法总结

一、使用 iterrows()

iterrows() 是 pandas 中最常用的遍历 DataFrame 行的方法之一。它将 DataFrame 的每一行作为一个 Series 进行迭代。

import pandas as pd


def iterrows_example():
    # 创建一个示例 DataFrame
    data = {'Name': ['Alice', 'Bob', 'Charlie'],
            'Age': [25, 30, 35],
            'Score': [85, 90, 88]}
    df = pd.DataFrame(data)
    print("Original DataFrame:")
    print(df)
    # 使用 iterrows() 遍历
    for index, row in df.iterrows():
        print(f"Index: {index}, Name: {row['Name']}, Age: {row['Age']}, Score: {row['Score']}")


# 调用函数
iterrows_example()

代码解释

  • df.iterrows():生成一个迭代器,它为 DataFrame 中的每一行生成一个包含行索引 index 和行数据 row(作为 Series)的元组。
  • for index, row in df.iterrows():使用 for 循环遍历 DataFrame 的每一行。
  • row['Name']:通过列名从 row 这个 Series 中获取元素。

二、使用 itertuples()

itertuples() 会将 DataFrame 的每一行作为一个命名元组进行迭代,相比于 iterrows(),它通常更快,因为元组的访问比 Series 更快。

import pandas as pd


def itertuples_example():
    # 创建一个示例 DataFrame
    data = {'Name': ['Alice', 'Bob', 'Charlie'],
            'Age': [25, 30, 35],
            'Score': [85, 90, 88]}
    df = pd.DataFrame(data)
    print("Original DataFrame:")
    print(df)
    # 使用 itertuples() 遍历
    for row in df.itertuples():
        print(f"Index: {row.Index}, Name: {row.Name}, Age: {row.Age}, Score: {row.Score}")


# 调用函数
itertuples_example()

代码解释

  • df.itertuples():生成一个迭代器,它为 DataFrame 中的每一行生成一个命名元组。
  • for row in df.itertuples():使用 for 循环遍历 DataFrame 的每一行。
  • row.Indexrow.Name 等:通过命名元组的属性访问元素,这里 Index 是默认的索引属性,后面是 DataFrame 的列名。

三、使用 iteritems()

iteritems() 是对 DataFrame 的列进行迭代,将每一列作为一个 Series 进行迭代。

import pandas as pd


def iteritems_example():
    # 创建一个示例 DataFrame
    data = {'Name': ['Alice', 'Bob', 'Charlie'],
            'Age': [25, 30, 35],
            'Score': [85, 90, 88]}
    df = pd.DataFrame(data)
    print("Original DataFrame:")
    print(df)
    # 使用 iteritems() 遍历
    for column_name, column_data in df.iteritems():
        print(f"Column: {column_name}")
        print(column_data)


# 调用函数
iteritems_example()

代码解释

  • df.iteritems():生成一个迭代器,它为 DataFrame 中的每一列生成一个包含列名 column_name 和列数据 column_data(作为 Series)的元组。
  • for column_name, column_data in df.iteritems():使用 for 循环遍历 DataFrame 的每一列。

四、使用 apply()

apply() 可以将函数应用于 DataFrame 的元素、行或列。

import pandas as pd


def apply_example():
    # 创建一个示例 DataFrame
    data = {'Name': ['Alice', 'Bob', 'Charlie'],
            'Age': [25, 30, 35],
            'Score': [85, 90, 88]}
    df = pd.DataFrame(data)
    print("Original DataFrame:")
    print(df)
    # 使用 apply() 对行进行操作
    def process_row(row):
        return f"{row['Name']} is {row['Age']} years old and scored {row['Score']}"
    result = df.apply(process_row, axis=1)
    print("\nResult of apply() on rows:")
    print(result)


# 调用函数
apply_example()

代码解释

  • def process_row(row):定义一个处理行的函数。
  • df.apply(process_row, axis=1):将 process_row 函数应用于 DataFrame 的每一行(axis=1 表示按行操作)。

五、使用 applymap()

applymap() 用于对 DataFrame 的每个元素应用一个函数,通常用于元素级别的操作。

import pandas as pd


def applymap_example():
    # 创建一个示例 DataFrame
    data = {'A': [1, 2, 3], 'B': [4, 5, 6]}
    df = pd.DataFrame(data)
    print("Original DataFrame:")
    print(df)
    # 使用 applymap() 对元素进行操作
    def square(x):
        return x ** 2
    result = df.applymap(square)
    print("\nResult of applymap():")
    print(result)


# 调用函数
applymap_example()

代码解释

  • def square(x):定义一个对元素进行平方操作的函数。
  • df.applymap(square):将 square 函数应用于 DataFrame 的每个元素。

六、使用 np.ndenumerate() 结合 values 属性

如果需要同时访问 DataFrame 的元素及其索引,可以将 numpy 的 ndenumerate() 与 DataFrame 的 values 属性结合使用。

import pandas as pd
import numpy as np


def ndenumerate_example():
    # 创建一个示例 DataFrame
    data = {'A': [1, 2, 3], 'B': [4, 5, 6]}
    df = pd.DataFrame(data)
    print("Original DataFrame:")
    print(df)
    # 使用 np.ndenumerate() 结合 values 属性遍历
    values = df.values
    for (i, j), value in np.ndenumerate(values):
        print(f"Row {i}, Column {j}: {value}")


# 调用函数
ndenumerate_example()

代码解释

  • df.values:将 DataFrame 转换为 numpy 数组。
  • np.ndenumerate(values):生成一个迭代器,为 numpy 数组中的每个元素生成一个包含元素索引 (i, j) 和元素值 value 的元组。

在选择遍历方法时,要根据具体需求和性能考虑进行选择。对于逐行操作,itertuples() 通常性能较好;对于元素级别的操作,根据情况选择 applymap() 或 apply();对于列操作,可使用 iteritems() 。

你可能感兴趣的:(包罗万象,python,pandas,开发语言)