从 pandas 数据框中删除行和列

Mic*_*rue 3 python user-interface pandas

我有一个 CSV 文件,其中包含对称邻接矩阵,这意味着行和列具有相同的标签。

我想将其导入到 pandas 数据框中,理想情况下会弹出一些 GUI 并要求要删除的项目列表......然后将该列表放入并将相对行和列中的值设置为零并返回一个单独的更改数据框。

简而言之,采用以下矩阵的东西

a b c d e
Run Code Online (Sandbox Code Playgroud)

0 3 5 3 5

b 3 0 2 4 5

c 5 2 0 1 7

d 3 4 1 0 9

5 5 7 9 0

弹出一个简单的界面,询问“应删除哪些区域”以及输入这些区域的一行

并假设输入了 c 和 e

回报

ABCDE

0 3 0 3 0

b 3 0 0 4 0

0 0 0 0 0

d 3 4 0 0 0

0 0 0 0 0

更改后的条目如粗体所示

它应该能够对输入的尽可能多的区域执行此操作,最多可达 379....最好用逗号分隔

jez*_*ael 5

通过索引值设置列和行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
Run Code Online (Sandbox Code Playgroud)

另一个解决方案是使用 numpy 广播创建布尔掩码并通过以下方式设置值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
Run Code Online (Sandbox Code Playgroud)