我开始学习熊猫。我在SO中看到了很多问题,人们问如果列匹配特定值,如何删除行。
在我看来,情况恰恰相反。想象一下,拥有这个数据框:
您想知道的是,如果任何列的任何行中的值均为salty
,则应删除该列,其结果是:
我尝试了与此类似的地方:
if df.loc[df['A'] == 'salty']:
df.drop(df.columns[0], axis=1, inplace=True)
但是我很迷失在寻找有关如何基于该列的行值删除列的文档。该代码混合了查找特定列并始终删除第一列的过程(因为我的想法是在for
循环的所有列中搜索该列中的行的值。
答案 0 :(得分:2)
对您的值进行比较,然后使用DataFrame.any
获取要索引的掩码:
df.loc[:, ~(df == 'Salty').any()]
如果您坚持使用drop
,这就是您需要这样做的方式。传递索引列表:
df.drop(columns=df.columns[(df == 'Salty').any()])
df = pd.DataFrame({
'A': ['Mountain', 'Salty'], 'B': ['Lake', 'Hotty'], 'C': ['River', 'Coldy']})
df
A B C
0 Mountain Lake River
1 Salty Hotty Coldy
(df == 'Salty').any()
A True
B False
C False
dtype: bool
df.loc[:, ~(df == 'Salty').any()]
B C
0 Lake River
1 Hotty Coldy
df.columns[(df == 'Salty').any()]
# Index(['A'], dtype='object')
df.drop(columns=df.columns[(df == 'Salty').any()])
B C
0 Lake River
1 Hotty Coldy
答案 1 :(得分:2)
这是一种可能性:
df = df.drop([col for col in df.columns if df[col].eq('Salty').any()], axis=1)
答案 2 :(得分:0)
以下内容是在所需列与特定值匹配的位置找到索引,然后将其删除。我认为这可能是实现此目的的更直接方法:
df.drop(df.loc[df['Your column name here'] == 'Match value'].index, inplace=True)