当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python Pandas DataFrame eval方法用法及代码示例


Pandas DataFrame.eval(~) 方法评估 DataFrame 列上的操作,该操作被编码为字符串。该方法不支持对特定行和值进行操作。

警告

如果您对其他人提供给您的字符串调用eval(~),则可能会运行恶意代码。

这并不意味着使用 eval(~) 是不好的做法 - 事实上,众所周知,eval(~) 的性能优于其他 Pandas 方法,因此鼓励使用它。只需确保对其他人提供的字符串进行验证即可。

参数

1.expr | string | optional

要评估的表达式。

2. inplace | boolean | optional

  • 如果是True,则直接修改源DataFrame。

  • 如果False,则将返回新的DataFrame,并且源DataFrame将保持不变。

默认情况下,inplace=False

返回值

评估的结果 - 类型可能因结果而异。如果是 inplace=True ,则不会返回任何内容,因为源 DataFrame 被直接修改。

例子

考虑以下 DataFrame :

df = pd.DataFrame({"A":[3,4],"B":[5,6],"C":[7,8]})
df



   A  B  C
0  3  5  7
1  4  6  8

基本用法

计算每行的总和:

df.eval("A + B + C")



0    15
1    18
dtype: int64

这里的返回类型是 Series 。请注意我们如何使用标签直接引用列,这很方便,因为我们通常必须引用像 df["A"] 这样的列。

添加新列

要添加新列:

df.eval("D = A + B + C")



   A  B  C  D
0  3  5  7  15
1  4  6  8  18

由于inplace 参数默认设置为False,因此源DataFrame 保持不变。要直接修改源 DataFrame 而无需创建新的 DataFrame,请设置 inplace=True

df.eval("D = A + B + C", inplace=True)
df



   A  B  C  D
0  3  5  7  15
1  4  6  8  18

我们在这里再次展示df供您参考:

df



   A  B  C
0  3  5  7
1  4  6  8

添加多列

要一次添加多列:

df.eval(
 """
   D = A + B
   E = A + D
   """
)



   A  B  C  D   E
0  3  5  7  8   11
1  4  6  8  10  14

请注意,我们如何使用最初不在 df 中的列 D 来创建列 E

使用局部变量

我们还可以使用 @ 语法访问 eval(~) 外部定义的局部变量:

s = pd.Series([100,200])
df.eval("A + B + C + @s")



0    115
1    218
dtype: int64

相关用法


注:本文由纯净天空筛选整理自Isshin Inada大神的英文原创作品 Pandas DataFrame | eval method。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。