Python ValueError: File is not a recognized excel file

Python读取Excel类文件错误

我是在pandas读取xlsx文件时遇到的错误

ValueError: File is not a recognized excel file
ValueError:文件不是可识别的excel文件

这个错误的原因是xlsx文件本身的问题,可能是wps或是Excel保存格式出错无法被识别。

之后重新制作xlsx文件并完整保存

ImportError: Missing optional dependency 'xlrd'. Install xlrd >= 1.0.0 for Excel support Use pip or conda to install xlrd.
ImportError:缺少可选依赖项“xlrd”。安装xlrd>=1.0.0 for Excel支持使用pip或conda安装xlrd。 

这里又出现了新问题,缺少xlrd,pip 安装 xlrd 模块即可

pip install xlrd

如果安装的是2.0以下版本的xlrd模块,此次的读取问题应该已经解决了。
但是如果安装的xlrd版本超过2.0,依旧会有错误

ValueError: Your version of xlrd is 2.0.1. In xlrd >= 2.0, only the xls format is supported. Install openpyxl instead.
ValueError:您的xlrd版本是2.0.1。在xlrd>=2.0中,仅支持xls格式。改为安装openpyxl。

这里的问题是由于xlrd2.0以上版本仅支持xls格式Excel,pip 安装 openpyxl 模块即可

pip install openpyxl

import xlrd
import openpyxl

导入模块之后就可以使用轻松使用各种读取Excel文件的方法了,当然也可以不导入模块,只需要将这两种模块加入到外部库就可以。
例如在PyCharm的设置中在project:interpreter选项看到有包含这两个模块就可以。

示例代码
PyCharm

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import xlrd
import openpyxl

path = 'Chapter5_test1.xlsx'
data = pd.read_excel(path);

tb = data.loc[:,['日期','猪肉价格']].head(10)
tb1 = data.loc[:,['日期','牛肉价格']].head(10)
tb2 = data.loc[:,['日期','猪肉价格']]
tb3 = data.loc[:,['日期','牛肉价格']]

x = np.arange(1, len(tb.iloc[:,0]) +1)
x2 = np.arange(1, len(tb2.iloc[:,0]) +1)
y1 = tb.iloc[:,1]
y2 = tb1.iloc[:,1]
y3 = tb2.iloc[:,1]
y4 = tb3.iloc[:,1]
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.figure('子图2')
plt.figure(figsize = (25,15))

plt.subplot(2,2,1)
plt.plot(x,y1,'r*--')
plt.xlabel('日期')
plt.ylabel('1.1-1.10 猪肉价格走势图')
plt.title('猪肉价格走势图')
plt.xticks([1,2,3,4,5,6,7,8,9,10],tb['日期'].values[[0,1,2,3,4,5,6,7,8,9,]],rotation = 90)

plt.subplot(2,2,2)
plt.plot(x,y2,'b*--')
plt.xlabel('日期')
plt.ylabel('1.1-1.10 牛肉价格走势图')
plt.title('牛肉价格走势图')
plt.xticks([1,2,3,4,5,6,7,8,9,10],tb1['日期'].values[[0,1,2,3,4,5,6,7,8,9,]],rotation = 90)

plt.subplot(2,2,3)
plt.plot(x2,y3,'r*--')
plt.xlabel('日期')
plt.ylabel('1.1-1.15 猪肉价格走势图')
plt.title('猪肉价格走势图')
plt.xticks([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],tb2['日期'].values[[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14]],rotation = 90)

plt.subplot(2,2,4)
plt.plot(x2,y4,'b*--')
plt.xlabel('日期')
plt.ylabel('1.1-1.15 牛肉价格走势图')
plt.title('牛肉价格走势图')
plt.xticks([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],tb3['日期'].values[[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14]],rotation = 90)

plt.savefig('子图2')