Как импортировать более низкую матрицу tri angular, используя pandas? - PullRequest
0 голосов
/ 01 апреля 2020

Я пытаюсь импортировать более низкую матрицу tri angular в pandas (или numpy) в Python, чтобы преобразовать ее в симметричную квадратную матрицу, но я застрял на этапе импорта.

В матрице есть первый столбец с именами, но остальные столбцы являются числами в формате с разделителями табуляции, например так: A B 1 C 10 20 D 21 25 45

Я получаю сообщение об ошибке при попытке импортировать его, используя numpy : myfile = np.genfromtxt("trimatrix.txt", delimiter="\t") , а также при использовании pandas: myfile = pd.read_table("trimatrix.txt") В обоих случаях ошибки заключаются в том, что после чтения первой строки имеется только один столбец, а в других строках больше столбцов.

Спасибо за ваше время и помощь!

Ответы [ 2 ]

0 голосов
/ 02 апреля 2020

Я нашел обходной путь, используя awk и pandas:

  1. Сначала измените матрицу tri angular на awk, как указано здесь

  2. Открыть в pandas и изменить порядок данных. Поскольку в верхнем ряду содержится максимальное количество столбцов, его можно открывать и переворачивать.

Спасибо, Чернослив за руководство.

пример кода AWK: awk '{a[i++]=$0} END {for (j=i-1; j>=0;) print a[j--] }' lowertri.txt >uppertri.txt

А в питоне / pandas: import pandas as pd myfile = pd.read_table("uppertri.txt", header=None, index_col=0) myrevfile = myfile.iloc[::-1]

0 голосов
/ 01 апреля 2020

Простой ответ заключается в том, что вы не просто импортируете треугольник: его форма по определению несовместима с форматом angular прямоугольника, который требуется встроенным считывателям NumPy и PANDAS. Вы должны написать свой собственный код для чтения входного файла, вставить значения в соответствующие строки выбранной вами структуры данных и заполнить отсутствующие столбцы значением по умолчанию: я полагаю, нулями. Для этого нужен только простой l oop.

Учитывая, что то, что вы хотите, не является встроенным методом, вы можете обработать кодирование здесь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...