如何将Excel(*.xlsx)文件读取为二维数组?已试Pandas方案遇问题
把Excel(.xlsx)文件转为二维数组的靠谱方案
嘿,我来帮你搞定这个问题!你当前的代码里有个小疏忽:你调用了psi.as_matrix()但没把返回结果存到变量里,最后执行type(psi)当然还是pandas.core.frame.DataFrame——毕竟psi本身就是pandas读取Excel后生成的DataFrame对象,as_matrix()只是返回一个数组,但你没接收它的输出。另外要提一句,as_matrix()现在已经被弃用了,官方更推荐用to_numpy()。
下面给你两个优质方案,按需选择:
方案一:用Pandas(最便捷高效)
这是处理表格数据最常用的方式,代码简洁易维护:
import pandas as pd # 读取Excel文件,注意:如果你的表格没有表头(像示例数据那样),一定要加header=None # 不然pandas会把第一行数据当成列名,导致转换后少一行数据 df = pd.read_excel('./Psi130-130.xlsx', header=None) # 转为numpy数组,再转成Python原生二维列表 two_d_array = df.to_numpy().tolist() # 验证结果 print(type(two_d_array)) # 输出 <class 'list'> print(two_d_array) # 就是你想要的[[1, 2, 3, 4], [5, 4, 3, 1], [2, 3, 4, 6]]
方案二:用OpenPyXL(轻量无依赖)
如果你不想引入pandas这类重型库,用OpenPyXL直接读取单元格数据会更轻量化:
from openpyxl import load_workbook # 加载Excel文件,data_only=True表示读取单元格的实际值而非公式 wb = load_workbook('./Psi130-130.xlsx', data_only=True) ws = wb.active # 获取当前活跃的工作表 two_d_array = [] # 遍历每一行,values_only=True直接获取单元格值 for row in ws.iter_rows(values_only=True): # 过滤掉可能存在的空值(按需选择) cleaned_row = [cell for cell in row if cell is not None] two_d_array.append(cleaned_row) print(two_d_array) # 直接得到Python原生二维列表
小提示
- 别再用
as_matrix()啦,pandas 0.23.0版本之后就弃用这个方法了,to_numpy()是官方推荐的替代方案。 - 如果你的Excel有表头,记得去掉
header=None参数,或者根据需求调整读取逻辑。
内容的提问来源于stack exchange,提问作者Jeff
相关产品推荐
相关产品推荐

