2016-10-10 4 views
1

In R, wir sapply verwenden können Spalten mit der Anzahl der eindeutigen Werte größer als 10 von zu extrahieren:Python Pandas: select Spalte mit der Anzahl der eindeutigen Werte größer als 10

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

Wie können wir das tun Gleiche in Python Pandas?

auch, wie können wir Spalten mit fehlendem Anteil wählen weniger als 10% wie das, was wir in R tun können:

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

Dank.

Antwort

5

können Sie nunique mit apply verwenden, weil es nur mit Series funktioniert:

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

und zweiten isnull mit mean:

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

Probe:

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 

Oder:

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