python:如果条件满足,则删除df列
如果列中的所有值都是“0%”,我想从数据帧中删除给定的列 我的df:python:如果条件满足,则删除df列,python,pandas,dataframe,Python,Pandas,Dataframe,如果列中的所有值都是“0%”,我想从数据帧中删除给定的列 我的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': ['1
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%”进行比较,这将给出以下数据帧:
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
s:
In [183]: (dummy_df == '0%').all()
Out[183]:
UK False
US True
DE False
FR False
dtype: bool
最后,我们可以使用这些布尔值进行索引(但如果不想选择这是True
,则使用~
作为相反的值):dummy_df.loc[:,~(dummy_df='0%')。all()
类似地,您也可以这样做:
dummy_-df.loc[:,(dummy_-df!=“0%”)。any()
(选择至少一个值不等于“0%”的列)首先获取所有值!=“0%”的列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%
相关问题
all
不应该是any
(参见我的答案),因为OP想要删除所有值都为0%的列(因此应该包括任何值不为0%的列),非常感谢,这就是我要找的。
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%