如果列中的所有值都是" 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
答案 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%