假设我的数据类似于以下内容:
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
我们怎样才能降像所有这些列(value
,value2
,value3
)其中所有行具有相同的值,在一个命令或夫妇使用命令的 蟒蛇 ?
考虑到我们有类似的许多列value
,value2
,value3
… value200
。
输出:
index id name data1
0 345 name1 3
1 12 name2 2
5 2 name6 7
我们可以做的是apply
nunique
计算df中唯一值的数量,然后删除仅具有单个唯一值的列:
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
对数字列进行abs
取值,sums
然后取它们:
In [298]:
cols = df.select_dtypes([np.number]).columns
diff = df[cols].diff().abs().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