pandas 删除多列中包含False的所有行,如以下数据集中所示

9gm1akwq  于 2023-06-28  发布在  其他
关注(0)|答案(3)|浏览(141)

我需要使用Python删除所有从col2到col6都为FALSE的行。我认为“df = df[df.any(axis=1)]”也会考虑列“id”和“col1”。我需要排除列“id”和“col1”。
感谢你的帮助。
我尝试对从csv中提取的数据进行循环迭代,如下所示

import pandas as pd
columns_to_keep = ['col1'] 

for col in df.columns[1:]:
    if df[col].any():  
        columns_to_keep.append(col)  

filtered_df = df[columns_to_keep]

但我得到的错误列表索引必须是整数或切片,而不是str

mnemlml8

mnemlml81#

使用此命令将给予输出:

out_df = df[~((df.iloc[:, 2:7] == "FALSE").all(axis=1))]

输出:

id      col1   col2   col3   col4   col5   col6   col7
1   1   0.017991  FALSE  FALSE  FALSE  FALSE   TRUE  FALSE
2   2   0.150298  FALSE  FALSE  FALSE   TRUE  FALSE  FALSE
slhcrj9b

slhcrj9b2#

使用DataFrame.loc:选择所有行和条件-链测试至少一个True并添加incluse列:

include = ['id','col1']
out = df.loc[:, df.any() | df.columns.isin(include)]

print (out)
   id      col1   col5   col6
0   0  0.036492  False  False
1   1  0.017991  False   True
2   2  0.150298   True  False
3   3  0.065861  False  False

更一般的解决方案是只测试带有DataFrame.select_dtypes的boolean列,并通过Series.reindex附加非boolens:

out = df.loc[:, df.select_dtypes('boolean').any().reindex(df.columns, fill_value=True)]

print (out)
   id      col1   col5   col6
0   0  0.036492  False  False
1   1  0.017991  False   True
2   2  0.150298   True  False
3   3  0.065861  False  False

如果要删除行:

exclude = ['id','col1']
out = df[df.drop(exclude, axis=1).any(axis=1)]

print (out)
   id      col1   col2   col3   col4   col5   col6   col7
1   1  0.017991  False  False  False  False   True  False
2   2  0.150298  False  False  False   True  False  False
out = df[df.select_dtypes('boolean').any(axis=1)]

print (out)
   id      col1   col2   col3   col4   col5   col6   col7
1   1  0.017991  False  False  False  False   True  False
2   2  0.150298  False  False  False   True  False  False
li9yvcax

li9yvcax3#

若要删除DataFrame中列col2到col6中所有值均为False的行,同时排除id和col1列,可以使用loc访问器指定列范围,并使用将axis参数设置为1的any方法。下面是一个例子:

df = pd.DataFrame(data)

# Drop rows with all False values from col2 to col6 (excluding id and col1)
df = df.loc[df.iloc[:, 2:7].any(axis=1)]

print(df)

相关问题