Pandas是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。Pandas提供了大量能使我们快速便捷地处理数据的函数和方法。你很快就会发现,它是使Python成为强大而高效的数据分析环境的重要因素之一。本文主要介绍一下Pandas中pandas.DataFrame.assign方法的使用。

DataFrame.assign(**kwargs)

为DataFrame分配新列。

返回一个新对象,该对象包含除新列之外的所有原始列。重新分配的现有列将被覆盖。

参数:

**kwargs : dict of {str: callable 或 Series}

列名是关键字。如果这些值是可调用的,

那么它们将在DataFrame上计算并分配给新列。

可调用项不能更改输入DataFrame(不过pandas不会检查它)。

如果这些值是不可调用的(例如,Seriesscalararray),则只分配它们。

返回:

DataFrame

一个新的DataFrame,包含所有现有列之外的新列。

Notes

可以在同一个赋值中分配多个列。对于python3.6及以上版本,“**kwargs”中后面的项目可能指“df”中新建或修改的列;项目按顺序计算并分配到“df”中。对于Python3.5及以下版本,没有指定关键字参数的顺序,您不能引用新创建或修改的列。所有项目首先计算,然后按字母顺序分配。

在版本0.23.0中进行了更改:关键字参数顺序在Python 3.6及更高版本中得到了维护。

例子

>>> df = pd.DataFrame({'temp_c': [17.0, 25.0]},
... index=['Portland', 'Berkeley'])
>>> df
temp_c
Portland 17.0
Berkeley 25.0

其中值是可调用的,在df上求值:

>>> df.assign(temp_f=lambda x: x.temp_c * 9 / 5 + 32)
temp_c temp_f
Portland 17.0 62.6
Berkeley 25.0 77.0

或者,可以通过直接引用现有的Series或序列来实现相同的行为:

>>> df.assign(temp_f=df['temp_c'] * 9 / 5 + 32)
temp_c temp_f
Portland 17.0 62.6
Berkeley 25.0 77.0

在Python 3.6+中,您可以在同一个赋值中创建多个列,其中一个列依赖于同一个赋值中定义的另一个列:

>>> df.assign(temp_f=lambda x: x['temp_c'] * 9 / 5 + 32,
... temp_k=lambda x: (x['temp_f'] + 459.67) * 5 / 9)
temp_c temp_f temp_k
Portland 17.0 62.6 290.15
Berkeley 25.0 77.0 298.15