矢量化操作是 Pandas 的一个强大特性

矢量化操作是 Pandas 的一个强大特性,它允许你对整个 DataFrameSeries 进行操作,而不需要显式地写出循环。矢量化操作利用底层的 C 语言实现和优化,使得它在处理大数据集时比循环效率更高。

使用矢量化操作替代 iterrows() 的示例

假设你有以下 DataFrame df,并且你想要在每一行上执行某些操作:

import pandas as pd

data = {'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]}
df = pd.DataFrame(data)

 

示例 1: 对某一列的数据进行转换

假设你想对 A 列中的每个值加 10,使用 iterrows() 你可能会这样做:

import pandas as pd

data = {'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]}
df = pd.DataFrame(data)

 

使用矢量化操作,只需一行代码:

df['A'] = df['A'] + 10

 

示例 2: 根据多列的条件来生成新列

假设你想根据 AB 两列的值生成新的一列 D,内容是 AB 的和,使用 iterrows() 你可能会这样做:

for index, row in df.iterrows():
    df.at[index, 'D'] = row['A'] + row['B']

 

使用矢量化操作:

df['D'] = df['A'] + df['B']

 

示例 3: 条件筛选并修改

假设你想在 C 列大于 7 时,将 A 列的值改为 0,使用 iterrows() 你可能会这样做:

for index, row in df.iterrows():
    if row['C'] > 7:
        df.at[index, 'A'] = 0

 

使用矢量化操作:

df.loc[df['C'] > 7, 'A'] = 0

 

示例 4: 使用 apply 函数进行更复杂的操作

如果你需要对一列的值进行复杂的变换,使用 apply 是矢量化操作的一个变体,性能仍然优于 iterrows()。例如:

df['A'] = df['A'].apply(lambda x: x ** 2 + 2 * x + 1)

 

为什么矢量化操作更快?

  • 底层实现:矢量化操作是在底层 C 或 Cython 代码中直接执行的,这比逐行操作的 Python 循环快得多。
  • 减少 Python 循环iterrows() 逐行操作,每一行的数据处理都会引起 Python 解释器的调用,而矢量化操作通常是在更接近硬件的层次上执行的。
  • 并行计算:在某些情况下,矢量化操作可以自动并行化,从而进一步提升性能。

总结

尽可能使用矢量化操作来代替循环和 iterrows(),这会让代码不仅更简洁,而且性能也会显著提升。在处理大型数据集时,这种性能差异尤为明显。

posted @   侬侬发  阅读(97)  评论(0编辑  收藏  举报
努力加载评论中...
点击右上角即可分享
微信分享提示