如果所有值都等于字符串值,则删除列

2024-04-18 19:17:10 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有这样一个数据帧,df

Date      Time Black Carbon Carbon monoxide  PM10                    Particulate matter
0  19/10/2015  01:00:00      No data         No data                 No data   
1  19/10/2015  02:00:00      No data         No data                 No data   
2  19/10/2015  03:00:00      10              No data                 No data   
3  19/10/2015  04:00:00      No data         11 .                    No data   
4  19/10/2015  05:00:00      No data         No data                 No data 

我可以通过以下方式删除所有na列:

^{pr2}$

但是,我希望删除一列,条件是每一行都包含一个字符串No data

在本例中,我们将删除Particulate matter


Tags: 数据nodfdatadatetime方式black
2条回答

或者,您可以:

df.loc[:, ~df.apply(lambda x: x.nunique() == 1 and x[0]=='No data', axis=0)]

i)使用nunique检查列中是否只有一个元素;ii)列的第一个元素是否等于字符串。在

演示:

^{pr2}$

那么

^{3}$

退货

          a         b         c        e
0 -0.441122  3.499830 -0.161578  No data
1  1.683904  0.217083 -1.167220        0
2 -1.143193 -0.386444 -0.403479  No data

编辑:

作为对@Ted Petrou回答的另一种选择:

df1.loc[:, ~(df1.values == 'No data').all(axis=0)]

但是,我不知道是像他的答案一样将所有值转换为字符串还是只使用.values更有效。在

您需要的列不是所有列都等于No data。在

df.loc[:, ~(df.astype(str) == 'No data').all()]

输出

^{pr2}$

相关问题 更多 >