使用 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.1

PC2:

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

使用 pandas 从 Excel 文件中读取最后一列

无法使用 read_excel 从 pandas 中的 xlsx 文件中读取日期列?

使用 lambda 中的 pandas 从 s3 读取 excel 文件并转换为 csv

使用 python/pandas 从特定文件夹中读取几个嵌套的 .json 文件到 excel 中

使用 pandas 读取 excel 时精度损失