首页 > 解决方案 > 从熊猫数据框中删除行和列

问题描述

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

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

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

a b c d e

一个 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

c 0 0 0 0 0

d 3 4 0 0 0

e 0 0 0 0 0

更改后的条目以粗体显示

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

标签: pythonpandasuser-interface

解决方案


通过索引值设置列和行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

另一种解决方案是使用 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

推荐阅读