2017-07-26 1 views

Répondre

5

Vous pouvez utiliser les sorties de pd.to_numeric et l'indexation booléenne.

Pour que les chaînes utilisent:

df[pd.to_numeric(df.SIC, errors='coerce').isnull()] 

Sortie:

 SIC 
5 shine 
6  add 
8  Nan 
9 string 

Pour obtenir que les chiffres utilisent:

df[pd.to_numeric(df.SIC, errors='coerce').notnull()] 

Sortie:

 SIC 
1 246804 
2 135272 
3 898.01 
4 3453.33 
7  522 
10 29.11 
11  20 
0

Vous pouvez utiliser la méthode apply() avec la fonction isinstance(). Peut remplacer str avec int, float, etc:

df = pd.DataFrame([1,2,4.5,np.NAN,'asdf',5,'string'],columns=['SIC']) 
print(df) 
     SIC 
0  1 
1  2 
2  4.5 
3  NaN 
4 asdf 
5  5 
6 string 

print(df[df['SIC'].apply(lambda x: isinstance(x,str))]) 
     SIC 
4 asdf 
6 string 
0

Alternatives avec str.isalpha:

In [658]: df[df.SIC.str.isalpha()] 
Out[658]: 
     SIC 
5 shine 
6  add 
8  Nan 
9 string 

Pour ints/flotteurs, une solution légèrement plus forte avec pd.to_numeric est nécessaire:

In [679]: pd.to_numeric(df.SIC, errors='coerce').dropna() 
Out[679]: 
1  246804.00 
2  135272.00 
3  898.01 
4  3453.33 
7  522.00 
10  29.11 
11  20.00 
Name: SIC, dtype: float64 

Inconvénient : Conversion des ints en flotteurs. Solution de contournement (solution de Scott): df[pd.to_numeric(df.SIC, errors='coerce').notnull()]

+1

@ScottBoston Oui !! Je vous remercie. –