删除dataFrame列,其中所有行的行值均恒定

时间:2020-06-25 09:17:15

标签: 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

想出一种DataFrame来删除df中所有行中具有恒定值x的所有列的聪明且可扩展的方法是什么?

此示例中的结果将是没有第1列的dataFrame df。

df_altered =

   0  1    2 
0[[0, 1.4, 3] 
1 [0, 1.3, 1]
2 [0, 0.5, 3]]

在一个小的DataFrame中,我可以遍历每一列的所有行,但是不能缩放并使用大型DataFrame。

4 个答案:

答案 0 :(得分:3)

您可以使用<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.min.js"></script>

pd.drop()

输出:

df.drop(columns=df.columns[(df == 3).all()])

答案 1 :(得分:1)

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

>>> (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

答案 2 :(得分:0)

您可以尝试以下方法:

## 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)

输出:

enter image description here

答案 3 :(得分:0)

您可以先使用an example of how it should look 2,然后再使用df.ne作为布尔掩码

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

   0    2  3
0  0  1.4  3
1  0  1.3  1
2  0  0.5  3
相关问题