當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。