【发布时间】:2020-01-29 20:56:06
【问题描述】:
我创建了一个 python 脚本,在 Spyder 中运行它时运行良好。然后我用 pyinstaller 冻结它。当我运行 .exe 应用程序时,我收到以下错误。
相关代码如下:
import pandas as pd
import os
from datetime import datetime, time
import teradata as td
import numpy as np
import smtplib
import xlrd #needed for .exe
### Import Fleet Plan file ###
path = '\\\PHX43XCIFSC0001\Planning'
folder = '\Aircraft Availability'
file = '\\NP Fleet Plan.xlsx'
sheet = 'Mainline'
colnames = [0,2]
link = path + folder + file
update = pd.Timestamp.date(pd.Timestamp(datetime.fromtimestamp(
os.path.getmtime(link)), unit='s'))
mydata = pd.read_excel(link, sheet_name = sheet, header=colnames, index=None)
df = mydata
# Flatten multiindex to single columns
df.columns = (['{}:{}'.format(i[0], i[1]) for i in df])
df = df.reset_index()
df = df.rename(columns={'index':'mDate', df.columns[1]:'DOW'})
# Remove blank columns and Fleet level columns
xcolunassigned = [col for col in df.columns if 'Unnamed' in col]
df = df.drop(xcolunassigned, axis=1)
xcolfleet = [col for col in df.columns if 'FLEET' in col]
df = df.drop(xcolfleet, axis=1)
# Transpose data in to vectors
dft = pd.melt(df, id_vars=['mDate', 'DOW'], var_name='Status', value_name='mCount')
# Split Subfleets, join Legacy, remove 0 and NaN
dft[['Status', 'SubFleet']] = dft.Status.str.split(':',expand=True)
sDate = min(dft.mDate)
dft = dft.dropna()
dft = dft.reset_index(drop=True)
dft = dft[dft['mCount'] != 0]
dft = dft.reset_index(drop=True)
# Delete all data prior to today
dft = dft[dft['mDate'] >= datetime.combine(datetime.today(), time.min) ]
dft = dft.reset_index(drop=True)
我想知道是否需要像 xlrd 库那样显式导入依赖项。
感谢您的帮助。
【问题讨论】:
-
dft[dft['mDate'] >= datetime.today()]? @迈克尔 -
尝试了您的建议,但没有任何改变。我相信问题是在运行 .exe 时,mDate 没有作为日期出现。但是,由于运行脚本时是日期,所以我无法将其更改为日期,至少我还没有找到这样做的方法。
-
更新:问题在代码中更进一步。出于某种原因,当我使用 .exe 运行代码时,我的数据是使用索引列导入的,即使我明确告诉它不要这样做。不知道它为什么这样做,但我现在只是重新调整以删除这个额外的列。
标签: pandas numpy pyinstaller python-3.7