Проблема после использования функции pd.concat () - Латинская кодировка 1 - Немецкие символы - PullRequest
1 голос
/ 07 мая 2019

У меня есть набор данных, содержащий немецкие символы.При импорте 11 наборов данных с кодировкой «ISO-8859-1» или «latin-1» столбец названий городов Германии подходит, но при использовании pd.concat () с той же кодировкой названия городов меняются.

encoding = 'utf-8-sig' не работает, и вывод

import sys
print(sys.stdout.encoding)

равен UTF-8

# Importing the dataset
skill1 = pd.read_csv('./SkillWizardCityAerospaceEngineering26april.csv',encoding='ISO-8859-1')
skill2 = pd.read_csv('./SkillWizardCityBeautyandCosmetics26april.csv',encoding='ISO-8859-1')
skill3 = pd.read_csv('./SkillWizardCityBusinessSuportFunction26april.csv',encoding='ISO-8859-1')

для всех этих csv

print(skill1.CityName.unique())

он дает ['Берлин' 'Кельн' 'Дортмунд' 'Дюссельдорф' 'Франкфурт' 'Галле' 'Гамбург' 'Ганновер' 'Гейдельберг' 'Ингольштадт' 'Киль' 'Мангейм' 'Мюнхен' 'Нордерштедт' 'Регенсбург' ''Штутгарт']

После слияния

extension = 'csv'
all_filenames = [i for i in glob.glob('*.{}'.format(extension))]
#combine all files in the list
combined_csv = pd.concat([pd.read_csv(f,encoding='ISO-8859-1') for f in all_filenames ],sort=True)
combined_csv.CityName.unique()

результат будет следующим: массив (['Berlin', 'Cologne', 'Dortmund', 'DÃà€‚‚ à à à ƒ ƒ ƒ ‚‚ ‚ƒ ƒ se se se se se se se se se se se se se se.«Мангейм», «Мюнхен», «Нордерштедт», «Регенсбург», «Штутгарт», «Аугсбург», «Билефельд», «Бонн», «Бремен», «Хемниц», «Дармштадт», «Дрезден»,«Эрфурт», «Эссен», «Гейнцхан», Майнц, Майнц, Лейпциг, Майнц',

Я ожидаю, что это будет [' Берлин '' Кельн '' Дортмунд '' Дюссельдорф '' Франкфурт '' Галле '' Гамбург '' Ганновер '' Гейдельберг '' Ингольштадт '' Киль '' Мангейм ''«Мюнхен», «Нордерштедт», «Регенсбург», «Штутгарт»]. Я не хочу менять их вручную, мне нужно решение, которое сохранит все специальные символы, так как были затронуты другие столбцы.

1 Ответ

0 голосов
/ 07 мая 2019

Это не прямой ответ, но он может помочь лучше определить проблему и содержит код, поэтому он публикуется в качестве ответа.

Мой совет - попытаться определить причину возникновения проблемы.закодированные имена.Предполагая, что у вас нет столбца с именем «FILE_ORIGIN», я бы попробовал что-то вроде:

def build_csv(file):
    df = pd.read_csv(file,encoding='ISO-8859-1')
    df['FILE_ORIGIN'] = file
    return df

combined_csv = pd.concat([build_csv(f) for f in all_filenames ],sort=True)
combined_csv.loc[:,['CityName', 'FILE_ORIGIN']].groupby('CityName').agg(lambda x: ','.join(x))

Это должно отобразить файлы, откуда вы получаете ошибки кодирования.

...