Удалить строку и столбец из кадра данных Pandas - PullRequest
0 голосов
/ 14 января 2019

У меня есть файл CSV, который содержит симметричную матрицу смежности, что означает, что строка и столбец имеют эквивалентные метки.

Я хотел бы импортировать это в pandas dataframe, в идеале должен быть всплывающий графический интерфейс и запрашивать список элементов для удаления ...., а затем взять этот список и установить значения в соответствующей строке и столбце как нули и вернуть отдельный измененный фрейм данных.

Короче, то, что принимает следующую матрицу

a b c d e

a 0 3 5 3 5

b 3 0 2 4 5

c 5 2 0 1 7

d 3 4 1 0 9

e 5 5 7 9 0

Появляется простой интерфейс с вопросом "какие регионы должны быть удалены" и строка для ввода этих регионов

и скажите, что c и e введены

возвращает

a b c d e

a 0 3 0 3 0

b 3 0 0 4 0

c 0 0 0 0 0

d 3 4 0 0 0

e 0 0 0 0 0

с измененными записями, как показано жирным шрифтом

это должно быть в состоянии сделать это для всех областей ввода, которые могут быть до 379 .... в идеале разделенных запятыми

Ответы [ 2 ]

0 голосов
/ 14 января 2019

Начните с импорта csv:

import pandas as pd
adj_matrix = pd.read_csv("file/name/to/your.csv", index_col=0)

Затем запросить ввод:

regions = input("Please enter the regions that you want deleted (as an array of strings)")
adj_matrix.loc[regions, :] = 0
adj_matrix.loc[:, regions] = 0

Теперь adj_matrix должно быть в нужной вам форме.

0 голосов
/ 14 января 2019

Установить столбцы и строки по значениям индекса с помощью DataFrame.loc:

vals = ['c','e']
df.loc[vals, :] = 0

df[vals] = 0
#alternative
#df.loc[:, vals] = 0
print (df)
   a  b  c  d  e
a  0  3  0  3  0
b  3  0  0  4  0
c  0  0  0  0  0
d  3  4  0  0  0
e  0  0  0  0  0

Другое решение - создать логическую маску с широковещательной трансляцией и установить значения на DataFrame.mask:

mask = df.index.isin(vals) | df.columns.isin(vals)[:, None]
df = df.mask(mask, 0)
print (df)
   a  b  c  d  e
a  0  3  0  3  0
b  3  0  0  4  0
c  0  0  0  0  0
d  3  4  0  0  0
e  0  0  0  0  0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...