如何在python的列名称中替换瑞典语字符ä,å,ö?

时间:2019-02-19 12:05:42

标签: pandas python-2.7 python-unicode

我有一个数据框,其中某些列名称带有瑞典字符(ö,ä,å)。我想用简单的o,a,a代替这些字符。

我试图将列名称转换为str并替换字符,它可以工作,但是如果我想将str分配回列名称,则会变得很复杂,即,需要进行多次操作,使其变得复杂。

我尝试了以下代码,该代码将列名称中的瑞典语字符替换为英文字母,并将结果返回为str。

from unidecode import unidecode
unicodedata.normalize('NFKD',str(df.columns).decode('utf-8')).encode('ascii', 'ignore')

是否可以使用返回的str作为数据框的列名称?如果没有,那么是否有更好的方法替换列名称中的瑞典语字符?

2 个答案:

答案 0 :(得分:2)

对我来说,先进行规范化,然后编码为ascii,最后解码为utf-8

df = pd.DataFrame(columns=['aä','åa','oö'])

df.columns = (df.columns.str.normalize('NFKD')
                        .str.encode('ascii', errors='ignore')
                        .to_series()
                        .str.decode('utf-8'))
print (df)
Empty DataFrame
Columns: [aa, aa, oo]
Index: []

使用map或列表理解的另一种解决方案:

import unicodedata

f = lambda x: unicodedata.normalize('NFKD', x).encode('ascii', 'ignore').decode('utf-8')
df.columns = df.columns.map(f)
print (df)
Empty DataFrame
Columns: [aa, aa, oo]
Index: []

import unicodedata

df.columns = [unicodedata.normalize('NFKD', x).encode('ascii', 'ignore').decode('utf-8') 
                     for x in df.columns]
print (df)
Empty DataFrame
Columns: [aa, aa, oo]
Index: []

答案 1 :(得分:1)

当您有很多列时,这可能需要大量的手动工作,但是一种方法是像这样使用str.replace

    bänk  röund
0   1     3
1   2     4
2   3     5

df.columns = df.columns.str.replace('ä', 'a')
df.columns = df.columns.str.replace('ö', 'o')


    bank  round
0   1     3
1   2     4
2   3     5