2017-03-22 1 views
0

J'ai pandas.dataFrame avec colonne 'Pays', la tête() est inférieure à:Python, les expressions régulières - points de recherche dans la trame de données de pandas géants

0             tmp 
1      Environmental Indicators: Energy 
2             tmp 
3 Energy Supply and Renewable Electricity Produc... 
4             NaN 
5             NaN 
6             NaN 
7 Choose a country from the following drop-down ... 
8             NaN 
9            Country 

Lorsque j'utilise cette ligne:

energy['Country'] = energy['Country'].str.replace(r'[...]', 'a') 

Il n'y a pas de changement. Mais quand j'utilise cette ligne inseted:

energy['Country'] = energy['Country'].str.replace(r'[...]', np.nan) 

Toutes les valeurs sont NaN.

Pourquoi sortie uniquement deuxième changement de code? Mon but est de changer les valeurs avec le triple point seulement.

+0

Est-ce que cela fonctionne? energy ['Country']. replace ('...', 'a', inplace = True) –

+0

J'ai besoin de changer des valeurs entières, pas seulement les points triples. –

Répondre

0

Est-ce ce que vous voulez quand vous dites "J'ai besoin de changer des valeurs entières, pas seulement les points triples"?

mask = df.Country.str.contains(r'\.\.\.', na=False) 
df.Country[mask] = 'a' 
0

.replace(r'[...]', 'a') traite le premier paramètre comme une expression régulière, mais vous voulez traiter littéralement. , Vous avez besoin .replace(r'\.\.\.', 'a').

Quant à votre question réelle, .str.replace nécessite une chaîne comme second paramètre. Il tente de convertir np.nan en une chaîne (ce qui est impossible) et échoue. Pour la raison de ne pas me connaître, au lieu d'élever un TypeError, il retourne à la place np.nan pour chaque ligne.

+0

J'essaie .replace (r '\. \. \.', 'A'), mais le résultat est le même que précédemment (pas de changement dans les valeurs qui ont '...'). –