一、前言
當時為了讓打包的檔案比較乾淨,而在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為空值(只有欄名)來處理。
留言列表