python数据预处理出现异常



```python
# -*- coding:UTF-8 -*
import pandas as pd


def attrStatute():
    '''
    属性规约
    :return:
    '''
    rawData = pd.read_excel('data/original_data.xls').drop(columns=["热水器编号","有无水流", "节能模式"])
    return rawData


def valueStatute():
    '''
    数值规约
    :return:
    '''
    data = pd.read_excel('data/water_heater.xls')
    newData = data[data['开关机状态'].isin(['关']) & data['水流量'].isin([0])]
    return newData


def divideEvent():
    '''
    事件划分
    :return:
    '''
    # 阈值设置为4分钟
    threshold = pd.Timedelta('4 min')
    inputFile = 'data/water_heater.xls'
    outputFile = 'data/dividesequence.xls'
    data = pd.read_excel(inputFile)
    data['发生时间'] = pd.to_datetime(data['发生时间'], format='%Y%m%d%H%M%S')
    # 只保留水流量大于0的记录
    data = data[data['水流量'] > 0]
    # 将原数据的发生时间做一阶差分,得到一个时间差值的dataframe
    d = data['发生时间'].diff() > threshold
    # 累计求和编号数据
    data['事件编号'] = d.cumsum() + 1
    data.to_excel(outputFile)


if __name__ == '__main__':
    # attrStatute().to_excel("data/water_heater.xls")
    # valueStatute().to_excel("data/water_heater2.xls")z
    divideEvent()


代码报如下异常,请问有人知道怎么回事吗

```python

E:\python\shujuwajue\venv\Scripts\python.exe E:/python/shujuwajue/数据预处理.py 
Traceback (most recent call last):
  File "E:\python\shujuwajue\venv\lib\site-packages\pandas\io\excel\_base.py", line 1111, in __new__
    engine = config.get_option(f"io.excel.{ext}.writer", silent=True)
  File "E:\python\shujuwajue\venv\lib\site-packages\pandas\_config\config.py", line 261, in __call__
    return self.__func__(*args, **kwds)
  File "E:\python\shujuwajue\venv\lib\site-packages\pandas\_config\config.py", line 135, in _get_option
    key = _get_single_key(pat, silent)
  File "E:\python\shujuwajue\venv\lib\site-packages\pandas\_config\config.py", line 121, in _get_single_key
    raise OptionError(f"No such keys(s): {repr(pat)}")
pandas._config.config.OptionError: No such keys(s): 'io.excel.xls.writer'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "E:\python\shujuwajue\数据预处理.py", line 47, in <module>
    divideEvent()
  File "E:\python\shujuwajue\数据预处理.py", line 41, in divideEvent
    data.to_excel(outputFile)
  File "E:\python\shujuwajue\venv\lib\site-packages\pandas\core\generic.py", line 2252, in to_excel
    formatter.write(
  File "E:\python\shujuwajue\venv\lib\site-packages\pandas\io\formats\excel.py", line 934, in write
    writer = ExcelWriter(  # type: ignore[abstract]
  File "E:\python\shujuwajue\venv\lib\site-packages\pandas\io\excel\_base.py", line 1115, in __new__
    raise ValueError(f"No engine for filetype: '{ext}'") from err
ValueError: No engine for filetype: 'xls'

Process finished with exit code 1

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7456552
  • 这篇博客你也可以参考下:python对齐输出多组列表数据
  • 同时,你还可以查看手册:python-异常层次结构 中的内容
  • 除此之外, 这篇博客: 初识python中的 格式化输出 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
    • 字符串拼接
    name = input("请输入你的名字:")
    age = input("请输入你的年龄:")
    print(name+"的年龄为"+age)
    
    #执行结果为
    请输入你的名字:lisi
    请输入你的年龄:23
    lisi的年龄为23
    
    • 不同类型拼接
    name = input("请输入你的名字:")
    age = int(input("请输入你的年龄:"))
    print("%s五年后的年龄为%d"%(name, age+5))
    
    #执行结果
    请输入你的名字:lisi
    请输入你的年龄:23
    lisi五年后的年龄为28
    
    操作符说明
    %s字符串
    %d整数
    %f浮点数
    %%输出 %
    • 不考虑类型拼接
    name = input("请输入你的名字:")
    age = int(input("请输入你的年龄:"))
    print("{}五年后的年龄为{}".format(name, age+5))
    
    #执行结果
    请输入你的名字:lisi
    请输入你的年龄:23
    lisi五年后的年龄为28
    
    • 结合索引
    name = input("请输入你的名字:")
    age = int(input("请输入你的年龄:"))
    print("{0},五年后的{0}年龄为{1}".format(name, age+5))
    
    #执行结果
    请输入你的名字:lisi
    请输入你的年龄:23
    lisi,五年后的lisi年龄为28
    
  • 您还可以看一下 尹成老师的python数据库课程中的 基数排序小节, 巩固相关知识点

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

这个错误是因为缺少用于写入.xls格式的Excel文件的引擎。从pandas 1.2.0版本开始,默认的Excel写入引擎已更改为openpyxl,它不支持旧的.xls格式。

要解决此问题,有几个选择:

选项1:将文件保存为较新的.xlsx格式,而不是.xls。修改代码中的outputFile变量以使用.xlsx扩展名:
outputFile = 'data/dividesequence.xlsx'
确保已安装openpyxl包(pip install openpyxl),因为它是在.xlsx格式中写入Excel文件所需的包。

选项2:如果您确实需要将文件保存为旧的.xls格式,则可以使用xlwt引擎,方法是安装xlwt包(pip install xlwt)。然后,修改to_excel()方法调用以指定引擎:
python
data.to_excel(outputFile, engine='xlwt')
请注意,与较新的openpyxl引擎相比,xlwt引擎可能具有一些限制。

ValueError: No engine for filetype: 'xls',这是excel引擎缺少,安装下
pip install xlrd openpyxl