我有一个包含德语字符的数据集。 当导入编码为“ISO-8859-1”或“latin-1”的 11 个数据集时,德国城市名称列没问题,但是当使用具有相同编码的 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()
结果是: array(['柏林', '科隆', '多特蒙德', '德塞尔多夫', “法兰克福”、“哈勒”、“汉堡”、“汉诺威”、“海德堡”、 '因戈尔施塔特'、'基尔'、'曼海姆'、'慕尼黑'、'诺德施塔特'、 '雷根斯堡'、'斯图加特'、'奥格斯堡'、'比勒费尔德'、'波恩'、 '不来梅', '开姆尼茨', '达姆施塔特', '德累斯顿', '爱尔福特', '埃森', 'G','廷根', '莱比锡','美因茨',
我预计会是这样 ['柏林''科隆''多特蒙德''杜塞尔多夫''法兰克福''哈勒''汉堡' '汉诺威' '海德堡' '因戈尔施塔特' '基尔' '曼海姆' '慕尼黑' ‘诺德施泰特’‘雷根斯堡’‘斯图加特’] 我不想手动更改它们,我想要一个能够保留所有特殊字符的解决方案,因为还有其他列受到影响。
最佳答案
这不是直接答案,但可能有助于更好地识别问题,并且它包含代码,因此将其作为答案发布。
我的建议是尝试确定编码错误的名称的来源。假设您没有名为“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))
这应该显示出现编码错误的文件。
关于python - 使用 pd.concat() 函数后出现问题 - 编码 latin-1 - 德语字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56020486/