首页 > 解决方案 > 如何删除所有值为 0 的行,忽略第 n 个单元格?

问题描述

我知道如何删除数据框中所有值为 0 的行。但如果我想在检查该条件时忽略第 n 个(下例中的第一个)单元格,我无法找到解决方案。

在:

   0  title1  title2 title3
cat1  0        0       1
cat2  1        0       0
cat3  1        0       1

出去:

   0  title1  title2 title3
cat1  0        0       1
cat3  1        0       1

即使第一个单元格不为零,我也想删除 cat2 行。

谢谢你

标签: pythonpandasdataframe

解决方案


选择没有第一个 by 的所有列DataFrame.iloc,检查是否不等于with0以测试每行是否至少有一个s:DataFrame.neDataFrame.anyTrue

df = df[df.iloc[:, 1:].ne(0).any(axis=1)]
print (df)
      title1  title2  title3
cat1       0       0       1
cat3       1       0       1

详情

print (df.iloc[:, 1:])
      title2  title3
cat1       0       1
cat2       0       0
cat3       0       1

或者,如果想要忽略nth列,则此列是可能的drop

#python count from 0, so for first column is used 0
i = 0
df = df[df.drop(df.columns[i], axis=1).ne(0).any(axis=1)]
print (df)
      title1  title2  title3
cat1       0       0       1
cat3       1       0       1

详情

i = 0
print (df.columns[i])
title1

print (df.drop(df.columns[i], axis=1))
      title2  title3
cat1       0       1
cat2       0       0
cat3       0       1

推荐阅读