關於pandas.eval使用的一些問題。


https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.eval.html?highlight=eval#pandas.DataFrame.eval

pandas.eval在官方文檔中提示到的有點是執行高效率,同時可以使用字符串表達式進行計算,那么對於一些數學校驗來說,是十分方便的。

df = pd.DataFrame(dict(a=range(5), b=range(5, 10)))
df.loc[0,'a'] = np.nan

 

 

 

df.eval("""
    c = a + b
    d = a + b + c
    a = 1
    f = (c>5) or (d > 9)""", inplace=False)

 

 

 可以方便的得出校驗。但是在使用中有以下問題:

1、NAN值問題,NAN值會無法計算。因此執行前,需要先替換掉NAN值.

df.fillna(0.0,inplace=True)  # 這個效果好點,df.isnull()如果遇到多類型數據會報錯
#df[df.isnull()] = 0.0 df.eval(""" c = a + b d = a + b + c a = 1 f = (c>5) or (d > 9)""", inplace=False)

 

 

 2、如果計算的鍵值不存在,會報錯。

# 會提示KeyError
df.eval('e + b')

因此,需要先對列重新進行修正再進行計算。

#進行去重
df = df.reindex(columns = list(set(list(df.columns) + ['e'])),fill_value = 0) df.eval(
'e + b')

 

 

 綜上所述:

1、使用前,需要對數據缺失值進行預處理;

2、需要對字符串表達式進行解析,然后重新構建數據列值。所以,最后還需要對表達式進行解析,提取里面的鍵值。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM