Pandas DataFrame,如何删除总和为0的所有列和行

Bri*_*rig 9 python pandas

我有一个dataFrame,行和列总和为0.

    A   B   C    D
0   1   1   0    1
1   0   0   0    0 
2   1   0   0    1
3   0   1   0    0  
4   1   1   0    1 
Run Code Online (Sandbox Code Playgroud)

最终结果应该是

    A   B    D
0   1   1    1
2   1   0    1
3   0   1    0  
4   1   1    1 
Run Code Online (Sandbox Code Playgroud)

请注意,已删除仅包含零的行和列.

unu*_*tbu 18

df.loc[row_indexer, column_indexer] 允许您使用布尔掩码选择行和列:

In [88]: df.loc[(df.sum(axis=1) != 0), (df.sum(axis=0) != 0)]
Out[88]: 
   A  B  D
0  1  1  1
2  1  0  1
3  0  1  0
4  1  1  1

[4 rows x 3 columns]
Run Code Online (Sandbox Code Playgroud)

df.sum(axis=1) != 0 当且仅当行不总和为0时为真.

df.sum(axis=0) != 0 当且仅当列不总和为0时为真.

  • 如果您想选择所有行但仅选择总和不为零的列:`df.loc[:, (df.sum(axis=0) != 0)]` (4认同)
  • 在极少数情况下,使用术语"iff"是合适的,你错过了它! (3认同)
  • @Cyber​​:这是 Python 的禅宗:简单胜于复杂;可读性很重要:) (2认同)

Zig*_*ien 5

在 Pandas 数据框中构建全零的 Drop 行以避免使用 sum()

df = pd.DataFrame({'A': [1,0,1,0,1],
                   'B': [1,0,0,1,1],
                   'C': [0,0,0,0,0],
                   'D': [1,0,1,0,1]})

df.loc[(df!=0).any(1), (df!=0).any(0)]

   A  B  D
0  1  1  1
2  1  0  1
3  0  1  0
4  1  1  1
Run Code Online (Sandbox Code Playgroud)