2016-06-20 13 views
6

Jak zmienić znaki specjalne na zwykłe litery alfabetu? To mój dataframe:Jak usunąć akcenty z wartości w kolumnach?

In [56]: cities 
Out[56]: 

Table Code Country   Year  City  Value  
240   Åland Islands 2014.0  MARIEHAMN 11437.0 1 
240   Åland Islands 2010.0  MARIEHAMN 5829.5 1 
240   Albania   2011.0  Durrës  113249.0 
240   Albania   2011.0  TIRANA  418495.0 
240   Albania   2011.0  Durrës  56511.0 

chcę, żeby wyglądać tak:

In [56]: cities 
Out[56]: 

Table Code Country   Year  City  Value  
240   Aland Islands 2014.0  MARIEHAMN 11437.0 1 
240   Aland Islands 2010.0  MARIEHAMN 5829.5 1 
240   Albania   2011.0  Durres  113249.0 
240   Albania   2011.0  TIRANA  418495.0 
240   Albania   2011.0  Durres  56511.0 
+0

powiązane? http://stackoverflow.com/q/517923/1639625 –

Odpowiedz

1

Użyj tego kodu:

df['Country'] = df['Country'].str.replace(u"Å", "A") 
df['City'] = df['City'].str.replace(u"ë", "e") 

Zobacz here! Oczywiście powinieneś to zrobić dla każdej postaci specjalnej i każdej kolumny.

1

To dla Pythona 2.7. Do konwersji do ASCII może chcesz spróbować:

metoda
import unicodedata 

unicodedata.normalize('NFKD', u"Durrës Åland Islands").encode('ascii','ignore') 
'Durres Aland Islands' 
7

pandy jest użycie wektoryzowane str.normalize połączeniu z str.decode i str.encode:

In [60]: 
df['Country'].str.normalize('NFKD').str.encode('ascii', errors='ignore').str.decode('utf-8') 

Out[60]: 
0 Aland Islands 
1 Aland Islands 
2   Albania 
3   Albania 
4   Albania 
Name: Country, dtype: object 

Więc to zrobić dla wszystkich str dtypes:

In [64]: 
cols = df.select_dtypes(include=[np.object]).columns 
df[cols] = df[cols].apply(lambda x: x.str.normalize('NFKD').str.encode('ascii', errors='ignore').str.decode('utf-8')) 
df 

Out[64]: 
    Table Code  Country Year  City  Value 
0   240 Aland Islands 2014.0 MARIEHAMN 11437.0 1 
1   240 Aland Islands 2010.0 MARIEHAMN 5829.5 1 
2   240  Albania 2011.0  Durres 113249.0 
3   240  Albania 2011.0  TIRANA 418495.0 
4   240  Albania 2011.0  Durres 56511.0 
+0

Ta poprawka "Wyspy Alandzkie", ale "Durrës" stała się "DurrAs", a "Córdoba" stała się "CA3rdoba". Czy wiesz, jak to naprawić? – Marius

+0

Moje wyniki nie pokazują tego i właśnie wypróbowałem Córdobę, a wyszło ono jak Cordoba, musisz opublikować swoje surowe dane i kod, aby utworzyć plik df i błędy, które podajesz w swoim pytaniu, lub zamieścić link do swojego surowe dane – EdChum

1

Z pandy serii przykład

def remove_accents(a): 
    return unidecode.unidecode(a.decode('utf-8')) 

df['column'] = df['column'].apply(remove_accents) 

w tym przypadku dekodowania asciis

Powiązane problemy