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