Pandas DataFrame的转换完整指南

414 阅读4分钟

Pandas DataFrame transform()方法在其自身上调用该函数,产生一个带有转换值的DataFrame,其轴长与初始DataFrame相同。 transform()函数在你想要操作行或列时超级有用。

Pandas数据框架转换

Pandas数据框架transform()是一个内置的方法,它可以调用一个函数在自己身上产生一个具有转换值的数据框架 ,并且具有与自己相同的轴长。transform是一个与groupby方法结合使用的操作(这是pandas中最有用的操作之一)。

几乎,pandas用户很可能已经使用了聚合、过滤applygroupby来总结数据。然而,transform()方法在理解上有一定的难度,尤其是来自Excel世界的用户。

要在Python中导入和读取excel文件,可以使用Pandas的read_excel()方法。read_excel()函数是将excel表的数据读入DataFrame对象。它以二维表格的形式表示。

Pandas Transform vs. Pandas Aggregate

聚合必须返回数据的缩小版本,而转换可以返回完整数据的一些转换版本来重新组合。

对于这样的转换,输出是与输入相同的形状。常见的例子是通过减去组间平均值来使数据居中。

应用和转换函数之间的区别

apply()函数发送了一个完整的DataFrame副本,以便我们可以同时操作所有的行或列。

transform()函数根据轴值操作单一的行或列,而不是操作整个DataFrame。因此,我们可以根据需求使用apply()或transform()函数。

让我们看看df.transform()方法的语法。

语法

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

参数

它有四个参数,简要定义如下:

  1. 函数:它是函数、字符串、列表或字典。它是用于转换数据的函数。
  2. :它可以是0或1。如果是0(也叫'索引'),他们的函数就应用于每一列。如果是1(也称为 "列"),那么函数将应用于每一行。
  3. args:这是传递给函数的位置参数。
  4. kwargs: 是传递给函数的关键字参数。

返回值

transform()函数返回一个转换后的DataFrame。

关于pandas.DataFrame.transform()的示例程序

写一个程序来展示pandas.DataFrame.transform()的工作

import pandas as pd
df = pd.DataFrame({"A": [3, 4, 5, 6, 7],
                   "B": [8, 9, 10, 11, 12],
                   "C": [13, 64, 74, 23, 76],
                   "D": [53, 35, 64, 76, 85]})

print(df)
resultdf = df.transform(func=lambda x: x + 2)
print("\nDataFrame after being transformed:\n")
print("\n", resultdf)

输出

  A   B   C   D
0  3   8  13  53
1  4   9  64  35
2  5  10  74  64
3  6  11  23  76
4  7  12  76  85

DataFrame after being transformed:


    A   B   C   D
0  5  10  15  55
1  6  11  66  37
2  7  12  76  66
3  8  13  25  78
4  9  14  78  87

在上面的代码中,我们看到我们已经创建了一个DataFrame,然后 通过在DataFrame的每个元素上加2来转换DataFrame ,并打印出转换后的DataFrame。

写一个程序,将DataFrame的每个元素乘以5,然后打印出结果的DataFrame

请看下面的代码:

import pandas as pd

df = pd.DataFrame({"A": [3, 4, 5, 6, 7],
                   "B": [8, 9, 10, 11, 12],
                   "C": [13, 64, 74, 23, 76],
                   "D": [53, 35, 64, 76, 85]})

print(df)
resultdf = df.transform(func=lambda x: x*5)
print("\nDataFrame after being transformed:\n")
print("\n", resultdf)

输出

A   B   C   D
0  3   8  13  53
1  4   9  64  35
2  5  10  74  64
3  6  11  23  76
4  7  12  76  85

DataFrame after being transformed:


     A   B    C    D
0  15  40   65  265
1  20  45  320  175
2  25  50  370  320
3  30  55  115  380
4  35  60  380  425

在上面的例子中,我们看到我们已经创建了一个DataFrame,然后通过将 DataFrame的每个元素乘以5 来转换DataFrame ,并打印出转换后的DataFrame。

Pandas DataFrame和Numpy

让我们从一个Numpy数组中创建一个DataFrame,并使用transform()函数:

import pandas as pd
import numpy as np

df = pd.DataFrame(
    np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]), columns=['a', 'b', 'c'])

print(df)
resultdf = df.transform(func=lambda x: x*5)
print("\nDataFrame after being transformed:\n")
print("\n", resultdf)

输出

 a  b  c
0  1  2  3
1  4  5  6
2  7  8  9

DataFrame after being transformed:


     a   b   c
0   5  10  15
1  20  25  30
2  35  40  45

总结

DataFrame.transform()函数在应用其参数中指定的函数后,返回带有转换值的自生产的DataFrame。这个输出的DataFrame与传递的DataFrame具有相同的长度。