如果行包含 Pandas 中的特定值,则删除列

M.K*_*M.K 3 python dataframe pandas

我开始学习熊猫。我在这里看到了很多问题,人们问如果列匹配特定值,如何删除行。

就我而言,情况正好相反。想象一下有这个数据框:

数据框

您想知道的是,如果任何列在其任何一行中有 value salty,则应删除该列,结果是:

数据框 2

我已经尝试过与此有几个相似之处:

if df.loc[df['A'] == 'salty']:
   df.drop(df.columns[0], axis=1, inplace=True)
Run Code Online (Sandbox Code Playgroud)

但是我在查找有关如何根据该列的行值删除列的文档方面非常迷茫。该代码是查找特定列并始终删除第一列的组合(因为我的想法是在for循环中的所有列中搜索该列中一行的值。

cs9*_*s95 5

对您的值进行比较,然后用于DataFrame.any获取要索引的掩码:

df.loc[:, ~(df == 'Salty').any()]
Run Code Online (Sandbox Code Playgroud)

如果您坚持使用drop,这就是您需要这样做的方式。传递索引列表:

df.drop(columns=df.columns[(df == 'Salty').any()])
Run Code Online (Sandbox Code Playgroud)
df = pd.DataFrame({
    'A': ['Mountain', 'Salty'], 'B': ['Lake', 'Hotty'], 'C': ['River', 'Coldy']})
df
          A      B      C
0  Mountain   Lake  River
1     Salty  Hotty  Coldy
Run Code Online (Sandbox Code Playgroud)

(df == 'Salty').any()
A     True
B    False
C    False
dtype: bool

df.loc[:, ~(df == 'Salty').any()]
       B      C
0   Lake  River
1  Hotty  Coldy
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

  • @Mega_Noob您可能会发现我关于子字符串匹配的答案很有用:/sf/ask/794553931/#55335207 (2认同)