使用 pandas 从 Excel 中读取矩阵会根据所使用的 PC 提供 2 种不同的输出
Posted
技术标签:
【中文标题】使用 pandas 从 Excel 中读取矩阵会根据所使用的 PC 提供 2 种不同的输出【英文标题】:Reading a matrix from Excel with pandas gives 2 different outputs depending on the PC used 【发布时间】:2019-08-01 15:26:14 【问题描述】:我在 Excel 中存储了以下矩阵:
我用以下代码读取了这个矩阵:
def load_matrix(path):
"""
Load the matrix file.
Returns a numpy array.
"""
xl= pd.ExcelFile(path)
matrix = xl.parse('Matrix')
return matrix
在大部分 PC(称为 PC1)上,输出为:
这是所需的输出,以列/行名称作为索引。 但是,在第二台 PC(称为 PC2)上,输出为:
这对我来说是个问题,因为代码随后以下列方式访问数据,该方式仅适用于 PC1 的输出。
Mat.at["E1", "E1"]
版本详情:
PC1:
Python 3.7.1 xlrd 1.2.0 xlsxwriter 1.1.4 spyder 3.3.3 熊猫 0.23.4 numpy 1.16.1PC2:
Python 3.7.2 xlrd 1.2.0 xlsxwriter 1.1.5 spyder 3.3.3 熊猫 0.24.1 numpy 1.16.1我的猜测是版本之间的微小差异会导致问题。如何更改代码以使其与两者兼容,并从 PC1 输出输出?
谢谢:)
【问题讨论】:
您是否尝试过指定索引列?它给出相同的结果吗? pandas.pydata.org/pandas-docs/stable/reference/api/… @nickthefreak 实际上,使用pd.read_excel(matrix_path, index_col=0)
代替pd.read_excel(matrix_path)
可以得到正确的输出。我想我可以用它来读取 excel 而不是 .parse()
方法。
【参考方案1】:
自测试成功以来,这里的正确答案:)
基本上,ExcelFile.parse 采用与 .read_excel 方法相同的参数,您可以查看文档了解详细信息。
不确定为什么不同 PC 之间索引列的读取方式不同(可能是库甚至是 python 版本),但未来证明的最佳方法是显式设置 index_col 参数。
然后变成:
xl= pd.ExcelFile(path).parse(index_col=0)
或:
xl = pd.read_excel(matrix_path, index_col=0)
希望这会有所帮助!
【讨论】:
感谢您花时间写一个正确的答案。我不知道他们采用了相同的参数:)以上是关于使用 pandas 从 Excel 中读取矩阵会根据所使用的 PC 提供 2 种不同的输出的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Pandas 从 Excel 中读取某些列 - Python
无法使用 read_excel 从 pandas 中的 xlsx 文件中读取日期列?
使用 lambda 中的 pandas 从 s3 读取 excel 文件并转换为 csv