Pandas DataFrame DataFrame.transform()函数

Minahil Noor 2023年1月30日
  1. pandas.DataFrame.transform() 的语法
  2. 示例代码:DataFrame.transform()
  3. 示例代码:DataFrame.transform() 使用 sqrt 字符串作为函数
  4. 示例代码:DataFrame.transform() 传递函数列表
  5. DataFrame.apply() vs DataFrame.transform() 函数
Pandas DataFrame DataFrame.transform()函数

Python Pandas DataFrame.transform()DataFrame 上应用一个函数并转换 DataFrame。要应用的函数作为参数传递给 transform() 函数。变换后的 DataFrame 的轴长度应该与原始 DataFrame 相同。

pandas.DataFrame.transform() 的语法

DataFrame.transform(func, axis, *args, **kwargs)

参数

func 它是应用于 DataFrame 的函数。它使 DataFrame 的值发生变化。它可以是一个函数,函数名字符串,函数或函数名列表,或轴标签的字典。
axis 它是一个整数或字符串。它告诉目标轴的行或列。它可以是 0index 代表行,1columns 代表列。
*args 这些是要传递给函数的位置参数
**kwargs 这些是传递给函数的附加关键字参数

返回值

它返回一个转换后的 DataFrame,其长度与原始 “DataFrame “相同。如果返回的 DataFrame 具有不等长的长度,那么函数会引发 ValueError

示例代码:DataFrame.transform()

我们先试试这个函数,在 DataFrame 的每个值上加一个数字。

import pandas as pd

dataframe = pd.DataFrame({
                            'A': 
                                {0: 6, 
                                1: 20, 
                                2: 80,
                                3: 78,
                                4: 95}, 
                            'B': 
                                {0: 60, 
                                1: 50, 
                                2: 7,
                                3: 67,
                                4: 54}
                        })

print(dataframe)

示例 DataFrame 是:

    A   B
0   6  60
1  20  50
2  80   7
3  78  67
4  95  54
5  98  34

这个函数只有一个必须的参数,即 func。现在,我们将使用这个函数在 DataFrame 的每个值上加 20。

import pandas as pd

dataframe = pd.DataFrame(
    {"A": {0: 6, 1: 20, 2: 80, 3: 78, 4: 95}, "B": {0: 60, 1: 50, 2: 7, 3: 67, 4: 54}}
)

dataframe1 = dataframe.transform(func=lambda x: x + 20)
print(dataframe1)

输出:

     A   B
0   26  80
1   40  70
2  100  27
3   98  87
4  115  74
5  118  54

lambda 关键字用于声明一个匿名的加法函数。

示例代码:DataFrame.transform() 使用 sqrt 字符串作为函数

import pandas as pd

dataframe = pd.DataFrame(
    {"A": {0: 6, 1: 20, 2: 80, 3: 78, 4: 95}, "B": {0: 60, 1: 50, 2: 7, 3: 67, 4: 54}}
)

dataframe1 = dataframe.transform(func="sqrt")
print(dataframe1)

输出:

          A         B
0  2.449490  7.745967
1  4.472136  7.071068
2  8.944272  2.645751
3  8.831761  8.185353
4  9.746794  7.348469
5  9.899495  5.830952

在这里,我们没有传递 lambda 函数,而是将函数名作为字符串传递。

示例代码:DataFrame.transform() 传递函数列表

import pandas as pd

dataframe = pd.DataFrame(
    {"A": {0: 6, 1: 20, 2: 80, 3: 78, 4: 95}, "B": {0: 60, 1: 50, 2: 7, 3: 67, 4: 54}}
)

dataframe1 = dataframe.transform(func=["sqrt", "exp"])
print(dataframe1)

输出:

          A                       B              
       sqrt           exp      sqrt           exp
0  2.449490  4.034288e+02  7.745967  1.142007e+26
1  4.472136  4.851652e+08  7.071068  5.184706e+21
2  8.944272  5.540622e+34  2.645751  1.096633e+03
3  8.831761  7.498417e+33  8.185353  1.252363e+29
4  9.746794  1.811239e+41  7.348469  2.830753e+23

我们传递了一个由两个函数名组成的 “list”,即 ['sqrt', 'exp'] 作为 func。返回的 DataFrame 包含了两个额外的列,因为有一个额外的函数。

DataFrame.apply() vs DataFrame.transform() 函数

我们也可以使用 DataFrame.apply() 函数来实现上述结果。但如果我们比较一下这两个函数,就会发现 DataFrame.transform() 函数在处理复杂的操作时更有效率。

相关文章 - Pandas DataFrame