Python3.5下Pandas低版本无read_excel属性及升级问题求助
咱们一步步来拆解你遇到的两个问题,帮你找到合适的解决方案:
一、pd.read_excel()报错的原因及修复
你在Pandas 0.25或0.18版本里用pd.read_excel()触发AttributeError,是因为在这些旧版本中,read_excel并不是Pandas顶层模块的方法,它藏在pd.io.excel子模块里。
你可以用两种方式修复这个问题:
- 方式1:直接从子模块导入方法
from pandas.io.excel import read_excel excel_data_df = read_excel(workbook, engine='xlrd') - 方式2:通过子模块路径调用
excel_data_df = pd.io.excel.read_excel(workbook, engine='xlrd')
而Pandas 1.0+版本把这个方法移到了顶层模块,所以你在新版本里能直接用pd.read_excel(),这就是为什么新版本能正常运行的原因。
二、Python3.5无法升级到Pandas1.0.3的原因及可行方案
你猜的完全正确!Pandas 1.0.0及以上版本已经放弃了对Python3.5的支持,因为新版本大量使用了Python3.6才引入的f-string语法,所以在Python3.5环境下安装必然会触发语法错误。
如果你必须保留Python3.5环境,有两个靠谱的解决方案:
安装Pandas支持Python3.5的最高版本
Pandas最后一个兼容Python3.5的版本是0.25.3,你可以指定版本安装:pip install pandas==0.25.3这个版本不仅能解决你读取Excel的问题,也能支持大部分Excel样式设置的功能,足够满足你的需求。
用xlrd直接读取再转成DataFrame
如果你偶尔需要某些新功能,但又不想动Python版本,也可以绕开Pandas的read_excel,直接用xlrd读取文件再转换成DataFrame:import xlrd import pandas as pd # 打开Excel文件 workbook = xlrd.open_workbook("你的文件路径.xlsx") # 获取第一个工作表 sheet = workbook.sheet_by_index(0) # 读取所有行数据 data = [sheet.row_values(i) for i in range(sheet.nrows)] # 转成DataFrame,第一行作为列名 df = pd.DataFrame(data[1:], columns=data[0])
额外小建议
如果你的项目没有强制要求保留Python3.5,我建议你升级Python到3.6及以上版本(Ubuntu16.04可以通过pyenv或者官方ppa安装多版本Python),这样就能正常使用Pandas的最新版本,享受更多功能和bug修复啦。
内容的提问来源于stack exchange,提问作者shashank verma

