python pandas:如果条件,则删除一个df列

时间:2015-05-20 13:28:48

标签: python pandas dataframe

如果列中的所有值都是" 0%"我希望从pandas数据帧中删除给定列。

我的df:

data = {'UK': ['11%', '16%', '7%', '52%', '2%', '5%', '3%', '3%'],
        'US': ['0%', '0%', '0%', '0%', '0%', '0%', '0%', '0%'],
        'DE': ['11%', '16%', '7%', '52%', '2%', '5%', '3%', '3%'],
        'FR': ['11%', '16%', '7%', '52%', '2%', '5%', '3%', '3%']
        }
dummy_df = pd.DataFrame(data, 
                        index=    ['cat1','cat2','cat3','cat4','cat5','cat6','cat7','cat8'], 
                        columns=['UK', 'US', 'DE', 'FR'])

到目前为止我的代码:

dummy_df.drop(dummy_df == '0%',inplace=True)

我收到了一个值错误:

ValueError: labels ['UK' 'US' 'DE' 'FR'] not contained in axis

2 个答案:

答案 0 :(得分:8)

In [186]: dummy_df.loc[:, ~(dummy_df == '0%').all()]
Out[186]:
       UK   DE   FR
cat1  11%  11%  11%
cat2  16%  16%  16%
cat3   7%   7%   7%
cat4  52%  52%  52%
cat5   2%   2%   2%
cat6   5%   5%   5%
cat7   3%   3%   3%
cat8   3%   3%   3%

说明:

与您已经获得的'0%'进行比较,这给出了以下数据帧:

In [182]: dummy_df == '0%'
Out[182]:
         UK    US     DE     FR
cat1  False  True  False  False
cat2  False  True  False  False
cat3  False  True  False  False
cat4  False  True  False  False
cat5  False  True  False  False
cat6  False  True  False  False
cat7  False  True  False  False
cat8  False  True  False  False

现在我们想知道哪些列包含所有True

In [183]: (dummy_df == '0%').all()
Out[183]:
UK    False
US     True
DE    False
FR    False
dtype: bool

最后,我们可以使用这些布尔值进行索引(但与~相反,因为想要选择True}的位置:{ {1}}。

同样,你也可以这样做:dummy_df.loc[:, ~(dummy_df == '0%').all()](选择至少有一个值不等于'0%'的列)

答案 1 :(得分:2)

首先获取所有值!= '0%'

的列
In [163]: cols = (dummy_df != '0%').any()

In [164]: cols
Out[164]:
UK     True
US    False
DE     True
FR     True
dtype: bool

然后只调用cols

True
In [165]: dummy_df[cols[cols].index]
Out[165]:
       UK   DE   FR
cat1  11%  11%  11%
cat2  16%  16%  16%
cat3   7%   7%   7%
cat4  52%  52%  52%
cat5   2%   2%   2%
cat6   5%   5%   5%
cat7   3%   3%   3%
cat8   3%   3%   3%