Python Pandas:选择具有大于10的唯一值数的列

时间:2016-10-10 07:19:27

标签: python r pandas sapply

在R中,我们可以使用sapply来提取具有大于10的唯一值数的列:

X[,  sapply(X,  function(x) length(unique(x)))  >=10]

我们如何在Python Pandas中做同样的事情?

另外,我们如何选择缺少比例小于10%的列,就像我们在R中所做的那样:

X[,  sapply(X,  function(x) sum(is.na(x))/length(x)  )  < 0.1]

感谢。

1 个答案:

答案 0 :(得分:7)

您可以将nuniqueapply一起使用,因为它仅适用于Series

print (df.ix[:, df.apply(lambda x: x.nunique()) >= 10])

和第二个isnullmean

print (df.ix[:, df.isnull().mean() <  0.1])

样品:

df = pd.DataFrame({'A':[1,np.nan,3],
                   'B':[4,4,np.nan],
                   'C':[7,8,9],
                   'D':[3,3,5]})

print (df)
     A    B  C  D
0  1.0  4.0  7  3
1  NaN  4.0  8  3
2  3.0  NaN  9  5
print (df.ix[:, df.apply(lambda x: x.nunique()) >= 2])
     A  C  D
0  1.0  7  3
1  NaN  8  3
2  3.0  9  5

print (df.isnull().sum())
A    1
B    1
C    0
D    0
dtype: int64

print (df.isnull().sum() / len(df.index))

A    0.333333
B    0.333333
C    0.000000
D    0.000000
dtype: float64

print (df.isnull().mean())
A    0.333333
B    0.333333
C    0.000000
D    0.000000
dtype: float64


print (df.ix[:, df.isnull().sum() / len(df.index) <  0.1])
   C  D
0  7  3
1  8  3
2  9  5

或者:

print (df.ix[:, df.isnull().mean() <  0.1])
   C  D
0  7  3
1  8  3
2  9  5