首页 > 解决方案 > 如何替换python中列名中的瑞典字符ä、å、ö?

问题描述

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

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

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

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

有没有办法将返回的 str 用作数据框的列名?如果没有,那么有没有更好的方法来替换列名中的瑞典字符?

标签: pandaspython-2.7python-unicode

解决方案


对我来说,首先进行标准化,然后编码为 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: []

推荐阅读