Python-科学计算-pandas-17-对某些列或行运算

本文将介绍如何使用python的科学计算库pandas对dataframe的特定列或行进行运算,适用于windows 7系统,使用anaconda3-4.3.0.1和pycharm-community-2016.3.2编辑器,以及pandas版本0.19.2。

场景描述

假设我们有一个名为df_1的DataFrame,其列索引为["value1", "value2", "value3", "value4"],行索引为0到7。我们需要执行以下操作:

列操作:

  • 对"value1"和"value2"列的每个数进行平方。
  • 对"value1"和"value2"列的每个数加2。

行操作:

  • 对1和2行的每个数进行平方。
  • 对1和2行的每个数减3。

df_1的初始状态如下:

操作后的结果如下:

列操作:

行操作:

代码

以下是实现上述操作的Python代码:

import pandas as pd
import numpy as np

dict_1 = {"value1": [10, 20, 30, 40, 50, 60, 70, 80], "value2": [100, 200, 300, 400, 500, 600, 700, 800], "value3": [50, 20, 30, 90, 50, 60, 80, 80], "value4": [10, 30, 90, 40, 60, 60, 70, 80]}

df_1 = pd.DataFrame(dict_1, columns=["value1", "value2", "value3", "value4"]) print("\n", "df_1", "\n", df_1, "\n") print(type(df_1))

对某些列进行计算

df_2 = df_1.apply(lambda x: np.square(x) if x.name in ['value1', 'value2'] else x) print("\n", "df_2-列平方", "\n", df_2, "\n")

df_2 = df_1.apply(lambda x: x+2 if x.name in ['value1', 'value2'] else x) print("\n", "df_2-列+2", "\n", df_2, "\n")

对某些行进行计算

df_3 = df_1.apply(lambda x: np.square(x) if x.name in [1, 2] else x, axis=1) print("\n", "df_3-行平方", "\n", df_3, "\n")

df_3 = df_1.apply(lambda x: x-3 if x.name in [1, 2] else x, axis=1) print("\n", "df_3-行-3", "\n", df_3, "\n")

代码截图:

部分代码解读

列操作和行操作的区别在于

axis
参数的使用。默认情况下,
axis=0
表示对列进行操作,而
axis=1
表示对行进行操作。

例如,

df_2 = df_1.apply(lambda x: np.square(x) if x.name in ['value1', 'value2'] else x)
使用了
apply
方法和
lambda
函数。这行代码的作用是对列名为
['value1', 'value2']
的每个元素进行平方运算,其余列保持不变。
apply
函数可以看作是内置的循环操作,简化了代码的书写,无需手动编写循环。