首页 > 解决方案 > 用字典中的值替换整个 Pandas 数据框中的字符

问题描述

我有一个编码错误的德语 csv 文件。我想使用字典将字符转换回 utf-8。我认为我所做的是正确的,但是当我打印 DF 时,什么都没有改变。这是我的代码:

DATA_DIR = 'C:\\...'

translations = {
    'ö': 'oe',
    'ü': 'ue',
    'ß': 'ss',
    'ä': 'ae',
    '€': '€',
    'Ä': 'Ae',
    'Ö': 'Oe',
    'Ü': 'Ue'
}


def cleanup():
    for file in os.listdir(os.path.join(DATA_DIR)):
        if not file.lower().endswith('.csv'):
            continue

        data_utf = pd.read_csv(os.path.join(DATA_DIR, file), header=3, index_col=None, skiprows=0-2)

        data_utf.replace(translations, inplace=True)

        print(data_utf)

if __name__ == '__main__':
    cleanup()

我也试过

        for before, after in translations.items():
            data_utf.replace(before, after)

在函数内,并直接将翻译放在替换本身中。但是,如果我指定要替换字符的列,则此过程有效。我需要做什么才能将这些翻译应用于整个数据框以及数据框列标题?谢谢!

标签: pythonpandas

解决方案


在子字符串中添加regex=True替换,对于列可以将值转换为SeriesbyIndex.to_series然后使用replace

data_utf = pd.DataFrame({'raÜing':['ösaüs','Ä dd Ö','ÖÄ']})

translations = {
    'ö': 'oe',
    'ü': 'ue',
    'ß': 'ss',
    'ä': 'ae',
    '€': '€',
    'Ä': 'Ae',
    'Ö': 'Oe',
    'Ü': 'Ue'
}

data_utf.replace(translations, inplace=True, regex=True)
data_utf.columns = data_utf.columns.to_series().replace(translations, regex=True)
print (data_utf)
    raUeing
0   oesaues
1  Ae dd Oe
2      OeAe

推荐阅读