如何在熊猫的各列中的所有值均等于特定数字的列中删除列?例如,考虑以下数据框:
df = pd.DataFrame({'A': [1, 1, 1, 1],
'B': [0, 1, 2, 3],
'C': [1, 1, 1, 1]})
print(df)
输出:
A B C
0 1 0 1
1 1 1 1
2 1 2 1
3 1 3 1
如何删除1
列,使输出为:
B
0 0
1 1
2 2
3 3
答案 0 :(得分:2)
使用DataFrame.loc
来测试DataFrame.ne
与DataFrame.any
的至少一个非1
值:
df1 = df.loc[:, df.ne(1).any()]
或者用DataFrame.eq
用DataFrame.all
测试1
的每列真值,用~
测试倒置掩码:
df1 = df.loc[:, ~df.eq(1).all()]
print (df1)
B
0 0
1 1
2 2
3 3
编辑:
一个考虑因素是,如果您的列只有Nan和1,那么您想怎么做?
然后用DataFrame.fillna
将NaN
替换为0
,并使用与以前相同的解决方案:
df1 = df.loc[:, df.fillna(0).ne(1).any()]
df1 = df.loc[:, ~df.fillna(0).eq(1).all()]
答案 1 :(得分:2)
您可以使用any
:
df.loc[:, df.ne(1).any()]
答案 2 :(得分:2)
一个考虑因素是,如果您的列只有Nan和1,那么您想怎么做?
如果您也想在这种情况下掉线,则可以用1填充或添加或添加新条件。
df = pd.DataFrame({'A': [1, 1, 1, 1],
'B': [0, 1, 2, 3],
'C': [1, 1, 1, np.nan]})
print(df)
A B C
0 1 0 1.0
1 1 1 1.0
2 1 2 1.0
3 1 3 NaN
所有这些使NaN和1离开该列。
df.loc[:, df.ne(1).any()]
df.loc[:, ~df.eq(1).all()]
因此,您可以添加此添加内容以也删除该列。
df.loc[:, ~(df.eq(1) | df.isna()).all()]
输出:
B
0 0
1 1
2 2
3 3