所以我正在尝试编写一个Python脚本,将excel文件导入Pandas数据帧(条件是该文件是在特定日期修改的,例如今天):
import pandas as pd
import glob
import os
import datetime
def report():
for x in glob.glob("../*.xlsx"):
modx = os.path.getmtime(x)
xmod = datetime.datetime.fromtimestamp(modx)
if datetime.datetime.today() == xmod:
return x
我考虑过直接从函数中导入excel文件:
if datetime.datetime.today() == xmod:
df = pd.read_excel(x)
return df
尝试修改数据框(尝试导入后)会产生以下结果:
File "<ipython-input-56-e6fa18118137>", line 1, in <module>
df = pd.read_excel(report())
File "..\excel.py", line 151, in read_excel
return ExcelFile(io, engine=engine).parse(sheetname=sheetname, **kwds)
File "..\excel.py", line 196, in __init__
raise ValueError('Must explicitly set engine if not passing in'
ValueError: Must explicitly set engine if not passing in buffer or path for io.
无法深入了解。我甚至不确定是否需要定义一个函数。
答案 0 :(得分:0)
首先,请使用datetime.today().date()
。这将确保与xmod
的正确比较格式。
其次,glob
循环有点令人困惑。您确定要for
和if
处于相同的缩进级别吗?或者if
是否应该在for
循环中?无论哪种方式,都需要修复。
另外,尽量不要传递函数。如错误所示,显式传递路径或缓冲区。否则,它将询问您使用哪种引擎,这比您正在做的事情更有价值。
所有其他,只需订阅最佳编程/ Python实践。
In [1]: import pandas as pd
...: from datetime import datetime
...: import os
In [2]: def load_if_modified_today(xls):
...: modx = os.path.getmtime(xls)
...: xmod = datetime.fromtimestamp(modx)
...: if datetime.today().date() == xmod.date():
...: df = pd.read_excel(xls)
...: return df
In [3]: e = 'trades.xlsx'
...: df = load_if_modified_today(e)
...: df.head()
Out[3]:
System Name Symbol Unit Position Entry Date Entry Time \
0 TB Turtle FX Majors EURUSD 1 Short 2014-12-02 Day
1 TB Turtle FX Majors EURUSD 1 Short 2014-12-05 Day
2 TB Turtle FX Majors EURUSD 1 Long 2014-12-10 Day
3 TB Turtle FX Majors EURUSD 1 Long 2014-12-16 Day
4 TB Turtle FX Majors EURUSD 1 Short 2014-12-17 Day
Entry Order Price Stop Price Risk% Quantity Entry Fill
0 1.2420 1.2428 0.0024 6 1.2418
1 1.2284 1.2297 0.0022 4 1.2283
2 1.2447 1.2434 0.0017 3 1.2448
3 1.2496 1.2486 0.0026 5 1.2499
4 1.2385 1.2397 0.0022 4 1.2383
答案 1 :(得分:0)
我遇到了同样的ValueError:如果没有为io传入缓冲区或路径,必须显式设置引擎。我将代码更改为:
data = pd.read_excel(R"D:\\file.xlsx")
有效。
答案 2 :(得分:-1)
我遇到了类似的问题,结果发现安装的不同python框架版本相互冲突。我删除了其中一个(anaconda),保存并更新了普通的python2.7并且所有内容都已修复。