如何在数据框中将None字段修复为false

时间:2019-04-11 05:53:29

标签: python-3.x pandas dataframe

       Id      0     1     2     3     4     5
0   apple   True  None  None  None  None  None
1  orange  False  None  True  None  None  None
2  banana   True  None  None  True  None  None
3   guava  False  None  None  None  True  None
4  leeche   None  True  None  None  None  None

以上数据框包含布尔值和无值 如果0-5列中的任何一个为false,我想从更新的数据框中省略它们。考虑到None表示True值,因此我的结果应该像

           Id      
0         apple       
2         banana        
4         leeche 

我无法理解如何在多个列上使用组合过滤器。

1 个答案:

答案 0 :(得分:3)

使用:

cols = ['0','1','2','3','4','5']
df = df.loc[df[cols].ne('False').all(1), ['Id']]
#if False is boolean
#df = df.loc[df[cols].ne(False).all(1), ['Id']]
print (df)
       Id
0   apple
2  banana
4  leeche

如果需要检查所有列,而无需先检查:

df = df.loc[df.iloc[:, 1:].ne('False').all(1), ['Id']]

说明

首先按列名称选择列:

#if strings
cols = ['0','1','2','3','4','5']
#if numeric 
#cols = np.arange(6)
print (df[cols])
       0     1     2     3     4     5
0   True  None  None  None  None  None
1  False  None  True  None  None  None
2   True  None  None  True  None  None
3  False  None  None  None  True  None
4   None  True  None  None  None  None

然后通过DataFrame.ne检查是否不等于False

#if boolean False
print(df[cols].ne(False))
#if string False
#print(df[cols].ne('False'))
       0     1     2     3     4     5
0   True  True  True  True  True  True
1  False  True  True  True  True  True
2   True  True  True  True  True  True
3  False  True  True  True  True  True
4   True  True  True  True  True  True

并通过DataFrame.all测试每行是否所有True

print(df[cols].ne('False').all(1))
0     True
1    False
2     True
3    False
4     True
dtype: bool

通过boolean indexingId的一列选择[]DataFrame进行的最后过滤:

print(df[df[cols].ne('False').all(1)])
       Id     0     1     2     3     4     5
0   apple  True  None  None  None  None  None
2  banana  True  None  None  True  None  None
4  leeche  None  True  None  None  None  None

print(df.loc[df[cols].ne('False').all(1), ['Id']])
       Id
0   apple
2  banana
4  leeche