M.K*_*M.K 3 python dataframe pandas
我开始学习熊猫。我在这里看到了很多问题,人们问如果列匹配特定值,如何删除行。
就我而言,情况正好相反。想象一下有这个数据框:
您想知道的是,如果任何列在其任何一行中有 value salty,则应删除该列,结果是:
我已经尝试过与此有几个相似之处:
if df.loc[df['A'] == 'salty']:
df.drop(df.columns[0], axis=1, inplace=True)
Run Code Online (Sandbox Code Playgroud)
但是我在查找有关如何根据该列的行值删除列的文档方面非常迷茫。该代码是查找特定列并始终删除第一列的组合(因为我的想法是在for循环中的所有列中搜索该列中一行的值。
对您的值进行比较,然后用于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)