2017-07-26 4 views

Antwort

5

Sie können die Ausgaben von pd.to_numeric und boolean Indizierung verwenden.

Um nur die Saiten verwenden:

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

Ausgang:

 SIC 
5 shine 
6  add 
8  Nan 
9 string 

Um nur die Zahlen verwenden:

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

Ausgang:

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

Sie können die apply()-Methode zusammen mit der isinstance()-Funktion verwenden. Kann ersetzen str mit 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

Alternativen mit str.isalpha:

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

Für ints/Schwimmer, eine etwas stärkere Lösung mit pd.to_numeric benötigt:

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 

Drawback : Umwandlung von Ints in Floats. Workaround (Scott's Lösung): df[pd.to_numeric(df.SIC, errors='coerce').notnull()]

+1

@ScottBoston Ja !! Vielen Dank. –