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

Joh*_*ohn 1 python r sapply pandas

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

X[,  sapply(X,  function(x) length(unique(x)))  >=10]
Run Code Online (Sandbox Code Playgroud)

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

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

X[,  sapply(X,  function(x) sum(is.na(x))/length(x)  )  < 0.1]
Run Code Online (Sandbox Code Playgroud)

谢谢.

jez*_*ael 7

您可以使用nuniqueapply,因为它仅适用于Series:

print (df.ix[:, df.apply(lambda x: x.nunique()) >= 10])
Run Code Online (Sandbox Code Playgroud)

和第二isnullmean:

print (df.ix[:, df.isnull().mean() <  0.1])
Run Code Online (Sandbox Code Playgroud)

样品:

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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)

要么:

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