Python 删除所有行的行值为常量的数据帧列

Python 删除所有行的行值为常量的数据帧列,python,pandas,dataframe,Python,Pandas,Dataframe,从数据帧开始,例如 import pandas as pd df = pd.DataFrame( [[0, 3, 1.4, 3], [0, 3, 1.3, 1], [0, 3, 0.5, 3]] ) 或视觉上: 0 1 2 3 0[[0, 3, 1.4, 3] 1 [0, 3, 1.3, 1] 1 [0, 3, 0.5, 3]] 给定一个特殊值x_1=3 什么是一种智能的、可伸缩的方法来生成一个数据帧,该数据帧删除df中每行具有常量值x的所有列 本例中的结果是

从数据帧开始,例如

import pandas as pd

df = pd.DataFrame(
    [[0, 3, 1.4, 3], [0, 3, 1.3, 1], [0, 3, 0.5, 3]]
)
或视觉上:

   0  1  2    3  
0[[0, 3, 1.4, 3] 
1 [0, 3, 1.3, 1]
1 [0, 3, 0.5, 3]]
给定一个特殊值x_1=3

什么是一种智能的、可伸缩的方法来生成一个数据帧,该数据帧删除df中每行具有常量值x的所有列

本例中的结果是没有列1的数据帧df

df_改变=

   0  1    2 
0[[0, 1.4, 3] 
1 [0, 1.3, 1]
2 [0, 0.5, 3]]
在一个小数据帧中,我可以为每个列对所有行进行写入,但这不能扩展并处理大数据帧。

您可以使用pd.drop:

输出:

    0   2   3
0   0   1.4 3
1   0   1.3 1
2   0   0.5 3

一种方法是使用以下方法确定具有相等值的列:

>>> (df == df.iloc[0]).all(axis=0)
0     True
1     True
2    False
3    False
dtype: bool
然后提取上述遮罩的反方向:

>>> df.iloc[:, ~(df == df.iloc[0]).all(axis=0).to_numpy()]
     2  3
0  1.4  3
1  1.3  1
2  0.5  3
您可以尝试以下方法:

## find the unique val in each column
no_unique_val = df.nunique()

val = 3
for column_name in no_unique_val.index:    
    if 1 == no_unique_val[column_name] and val == df[column_name].values[0]:            
        df.drop(column_name,axis=1, inplace=True)
输出:

可以将和用作布尔掩码

df.loc[:, df.ne(3).any()]

   0    2  3
0  0  1.4  3
1  0  1.3  1
2  0  0.5  3

您的标题与描述不匹配。为什么0列没有被删除?@MateenUlhaq似乎他忘了删除0列。很遗憾你删除了你的答案,因为我对解决方案很好奇。他在问题中说,给定一个特殊值:x=3,删除所有行中包含该值的列。因此,不应删除包含所有0值的列。您的答复帮助我了解了其中的内容比我最初意识到的要多。谢谢。
df.loc[:, df.ne(3).any()]

   0    2  3
0  0  1.4  3
1  0  1.3  1
2  0  0.5  3