【问题标题】:How do I import a lower triangular matrix using pandas?如何使用 pandas 导入下三角矩阵?
【发布时间】:2020-04-01 00:33:29
【问题描述】:

我正在尝试在 Python 中将下三角矩阵导入到 pandas(或 numpy)中,以便将其转换为对称方阵,但我被困在导入步骤中。

矩阵的第一列带有名称,但其余列是制表符分隔格式的数字,如下所示: A B 1 C 10 20 D 21 25 45

当我尝试使用 numpy 导入它时出现错误: myfile = np.genfromtxt("trimatrix.txt", delimiter="\t") 以及当我使用熊猫时: myfile = pd.read_table("trimatrix.txt") 在这两种情况下,错误都是因为读取第一行后只有一列,而其他行的列更多。

感谢您的宝贵时间和帮助!

【问题讨论】:

    标签: python python-3.x pandas numpy


    【解决方案1】:

    直截了当的答案是,您不能简单地导入三角形:根据定义,它的形状与 NumPy 和 PANDAS 的内置阅读器所需的矩形格式不兼容。您必须编写自己的代码来读取输入文件,将值填充到所选数据结构的相应行中,并用默认值填充缺失的列:我假设为零。这只需要一个简单的循环。

    鉴于您想要的不是内置方法,您可以从这里处理编码吗?

    【讨论】:

    • 谢谢。只是好奇是否有一个简单的解决方案可以通过 numpy 或 pandas 获得。是的,我会尝试弄清楚如何编码。我可能可以添加一些占位符(如 NA),然后再删除它们。
    • 研究插补不完整或缺失数据的常用方法,通常用于处理机器学习中的部分记录。
    【解决方案2】:

    我找到了使用 awk 和 pandas 的解决方法:

    1. 先用awk as posted here逆三角矩阵

    2. 在 pandas 中打开并反转数据帧的顺序。由于顶行的列数最多,因此可以打开和反转。

    感谢 Prune 的指导。

    示例 AWK 代码: awk '{a[i++]=$0} END {for (j=i-1; j>=0;) print a[j--] }' lowertri.txt >uppertri.txt

    在 python/pandas 中: import pandas as pd myfile = pd.read_table("uppertri.txt", header=None, index_col=0) myrevfile = myfile.iloc[::-1]

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-19
      • 1970-01-01
      相关资源
      最近更新 更多