python - 用字典中的值替换整个 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)
在函数内,并直接将翻译放在替换本身中。但是,如果我指定要替换字符的列,则此过程有效。我需要做什么才能将这些翻译应用于整个数据框以及数据框列标题?谢谢!
解决方案
在子字符串中添加regex=True
替换,对于列可以将值转换为Series
byIndex.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