close

一、前言

當時為了讓打包的檔案比較乾淨,而在conda env打開一個新環境打包,

而後重新pip install完所需的套件包時遇到,在舊環境(開發環境)可以執行,新環境(conda env打包環境)無法執行問題。

出現以下幾個錯誤訊息:

(a) inputs are all NaN

(b) min() arg is an empty sequence

 

二、發現問題

(a) inputs are all NaN

就環境可以執行打包環境卻不能執行的錯誤,

後來發現是在df = df.join(df2).dropna()中沒有join好,

導致join後的資料表出現一堆nan然後整個資料表的資料被dropna掉了。

 

(b) min() arg is an empty sequence

同上問題在整個資料表被dropna掉了,而留下的空白資料表去使用min產生之問題。

所以只要解決(1) inputs are all NaN之問題應該就可以獲得改善。

 

三、當時情況及解決辦法

(1) 當時情況

當時我有兩個資料表:df1、df2

前面有對df1做df1.index = pandas.to_datetime(df1.index)處理

但df1及df2的index看起來是一樣的(不然舊環境也不會讓我join的好),

我直接進行df = df.join(df2).dropna()的處理,而後進行後續計算。

在打開新的打包環境後不知道為何,pandas中的df.join方法跟舊環境出現結果不同,

導致出現join不完全產生一堆nan,而後被我接著使用的dropna()掉了,所以只要解決join不完全即可。

 

(2) 解決辦法

解決join不完全問題:

所以補上df2.index = pandas.to_datetime(df2.index),確保index保證是一樣的,

即使在新舊環境的判定上都可以使join正常運作,即可解決出現一堆nan被dropna掉問題,

而後 inputs are all NaN 獲得改善,最後 min() arg is an empty sequence 獲得改善。

 

四、後記

像這種因為檔案(.py)需要打包而使用虛擬環境(conda env)後重新pip install套件包後可能碰到之問題,

建議可以在新環境使用cmd執行.py檔確保沒問題後再使用pyinstaller打包,

如果出現問題對df使用print,print(df),來查看何處的df為空值(只有欄名)來處理。

 

arrow
arrow

    恩哥Python 發表在 痞客邦 留言(0) 人氣()