问题描述
我想检查某个列中的所有元素是否都包含数字 0?
我有一个用 df=pd.read_table('ad-data')
读取的数据集
由此我感受到了一个带有元素的数据框
[0] [1.] [2] [3] [4] [5] [6] [7] ....1559
[1.] 3 2 3 0 0 0 0
[2] 2 3 2 0 0 0 0
[3] 3 2 2 0 0 0 0
[4] 6 7 3 0 0 0 0
[5] 3 2 1 0 0 0 0
...
3220
我想检查从第 4 列到第 1559 列的数据集是否仅包含 0 或其他值。
解决方法
您可以使用 0 元素检查相等性并使用 all
表示行:
df['all_zeros'] = (df.iloc[:,4:1560] == 0).all(axis=1)
演示它的小示例(基于此处的第 1 到第 3 列):
N = 5
df = pd.DataFrame(np.random.binomial(1,0.4,size=(N,N)))
df['all_zeros'] = (df.iloc[:,1:4] == 0).all(axis=1)
df
输出:
0 1 2 3 4 all_zeros
0 0 1 1 0 0 False
1 0 0 1 1 1 False
2 0 1 1 0 0 False
3 0 0 0 0 0 True
4 1 0 0 0 0 True
更新:过滤非零值:
df[~df['all_zeros']]
输出:
0 1 2 3 4 all_zeros
0 0 1 1 0 0 False
1 0 0 1 1 1 False
2 0 1 1 0 0 False
更新 2:仅显示非零值:
pd.melt(
df_filtered.iloc[:,1:4].reset_index(),id_vars='index',var_name='column'
).query('value != 0').sort_values('index')
输出:
index column value
0 0 1 1
3 0 2 1
4 1 2 1
7 1 3 1
2 2 1 1
5 2 2 1
,
df['Check']=df.loc[:,4:].sum(axis=1)
,
这里是检查所有值是否为零的方法:很简单 并且不需要上述答案的高级功能。只有基本的 过滤、if 循环和变量赋值等功能。
first 是检查一列是否只有零的方法和 其次是如何查找所有列是否都为零。它 打印和回答声明。
检查一列是否只有零值的方法:
先制作一个系列:
has_zero = df[4] == 0
# has_zero is a series which contains bool values for each row eg. True,False.
# if there is a zero in a row it result will be "row_number : True"
下一个:
rows_which_have_zero = df[has_zero]
# stores the rows which have zero as a data frame
下一个:
if len[rows_which_have_zero] == total_number_rows:
print("contains only zeros")
else:
print("contains other numbers than zero")
# substitute total_number_rows for 3220
上述方法只检查rows_which_have_zero是否等于列中的行数。
查看所有列是否只有零的方法:
它使用上述函数并将其放入一个 if 循环中。
no_of_columns = 1559
value_1 = 1
if value_1 <= 1559
has_zero = df[value_1] == 0
rows_which_have_zero = df[has_zero]
value_1 += 1
if len[rows_which_have_zero] == 1559
no_of_rows_with_only_zero += 1
else:
return
检查所有行是否只有零:
#since it doesn't matter if first 3 columns have zero or not:
no_of_rows_with_only_zero = no_of_rows_with_only_zero - 3
if no_of_rows_with_only_zero == 1559:
print("there are only zero values")
else:
print("there are numbers which are not zero")
上面检查 no_of_rows_with_only_zero 是否等于行数(即 1559 减 3,因为只需要检查第 4 - 1559 行)
更新:
# convert the value_1 to str if the column title is a str instead of int
# when updating value_1 by adding: convert it back to int and then back to str