2017-09-29 8 views
0

J'ai un dataframe df en pythondonnées Wrangling en Python

Age  product 
------------------ 
21   apple 
11   orange 
eighteen mango 
35   pineapple 
35   122 
NA   apple 
30   -1 

Je ne veux que les colonnes numériques en âge, comment pourrais-je laisser tomber les lignes qui ne sont pas des entiers.

De même dans le produit, j'ai seulement besoin de chaînes, comment je laisser tomber les valeurs qui ne sont pas des chaînes.

Répondre

3

Un moyen assez sûr de vérifier les valeurs numériques est l'utilisation pd.isnumeric(..., errors='coerce'), puis vérifiez nulls; Étant donné que pandas peut contenir différents types de données dans une seule colonne, str.isnumeric rendement NaN si la valeur est de type numérique réelle et il ne reconnaît pas les nombres négatifs comme numérique parce python ne pas:

isnumeric = lambda s: pd.to_numeric(s, errors='coerce').notnull() 
df[isnumeric(df['Age']) & ~isnumeric(df['product'])] 

# Age product 
#1 21  apple 
#2 11  orange 
#4 35 pineapple 

Cette méthode ne vérifie valeurs numériques, vous aurez besoin d'une logique supplémentaire si vous avez besoin de vérifier les entiers.

+0

Comment pourrais-je changer la logique si je voulais seulement des chaînes. –

+1

La chaîne est un concept très large. Cela peut être quelque chose de ''123 '', 'abc''' '[1,2,3]'' même '' {a: b} ''tant qu'ils sont correctement cités. Si vous voulez dire des chaînes avec des caractères spécifiques tels que des lettres, vous avez besoin d'une expression régulière et de fonctions comme 'str.contains (...)' et 'str.match (...)'. Pour les lettres, vous aurez besoin de regex comme '[a-zA-Z] +' par exemple. Et utilisez-le comme 'df.product.str.match (" [a-zA-Z] + $ ")'. – Psidom