如何通过pandas或spark数据帧删除所有行中具有相同值的列?

问题描述 投票:20回答:2

假设我的数据类似于以下内容:

  index id   name  value  value2  value3  data1  val5
    0  345  name1    1      99      23     3      66
    1   12  name2    1      99      23     2      66
    5    2  name6    1      99      23     7      66

我们如何使用python在一个命令或几个命令中删除所有列(qazxsw poi,qazxsw poi,qazxsw poi)所有列具有相同值的列?

考虑我们有许多类似于valuevalue2value3 ... value的列。

输出:

value2
python pandas duplicates multiple-columns spark-dataframe
2个回答
30
投票

我们可以做的是value3 value200来计算df中唯一值的数量并删除只有一个唯一值的列:

   index id      name   data1
        0  345  name1    3
        1   12  name2    2
        5    2  name6    7

另一种方法是apply数字列和nunique他们:

In [285]:
nunique = df.apply(pd.Series.nunique)
cols_to_drop = nunique[nunique == 1].index
df.drop(cols_to_drop, axis=1)

Out[285]:
   index   id   name  data1
0      0  345  name1      3
1      1   12  name2      2
2      5    2  name6      7

另一种方法是使用具有相同值的列的标准偏差为零的属性:

diff

实际上,上述内容可以单行完成:

sums

3
投票

另一个解决方案是来自列的In [298]: cols = df.select_dtypes([np.number]).columns diff = df[cols].diff().sum() df.drop(diff[diff== 0].index, axis=1) ​ Out[298]: index id name data1 0 0 345 name1 3 1 1 12 name2 2 2 5 2 name6 7 ,未进行比较,然后将In [300]: cols = df.select_dtypes([np.number]).columns std = df[cols].std() cols_to_drop = std[std==0].index df.drop(cols_to_drop, axis=1) Out[300]: index id name data1 0 0 345 name1 3 1 1 12 name2 2 2 5 2 name6 7 选择的第一行与In [306]: df.drop(df.std()[(df.std() == 0)].index, axis=1) Out[306]: index id name data1 0 0 345 name1 3 1 1 12 name2 2 2 5 2 name6 7 进行比较,并使用set_index,最后使用iloc

eq
© www.soinside.com 2019 - 2024. All rights reserved.