Python 使用pd.concat()函数-编码拉丁-1-德语字符后出现问题
我有一个包含德语字符的数据集。 当导入编码为“ISO-8859-1”或“latin-1”的11个数据集时,德国城市名称的列可以使用,但使用相同编码的pd.concat()时,城市名称会发生变化 encoding='utf-8-sig'不工作,并且Python 使用pd.concat()函数-编码拉丁-1-德语字符后出现问题,python,pandas,csv,encoding,concat,Python,Pandas,Csv,Encoding,Concat,我有一个包含德语字符的数据集。 当导入编码为“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('./SkillWizardCityAerospaceEngine
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')
为了所有这些
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(195)(195)(195)(195)(195)(195)(195)(195)(195,
“法兰克福”、“哈雷”、“汉堡”、“汉诺威”、“海德堡”,
“英戈尔斯塔特”、“基尔”、“曼海姆”、“慕尼黑”、“诺德斯特德”,
“雷根斯堡”、“斯图加特”、“奥格斯堡”、“比勒菲尔德”、“波恩”,
“不来梅”、“开姆尼茨”、“达姆施塔特”、“德累斯顿”、“埃尔福特”、“埃森”,
"G(195)(195)(195)(195)(195)(195)(195)(195)(195,
“莱比锡”、“美因茨”
我希望是这样
柏林、科隆、多特蒙德、杜塞尔多夫、法兰克福、哈雷、汉堡
“汉诺威”“海德堡”“英戈尔斯塔特”“基尔”“曼海姆”“慕尼黑”
“诺德斯特德”、“雷根斯堡”、“斯图加特”]
我不想手动更改,我想要一个能够保留所有特殊字符的解决方案,因为还有其他列受到影响。这不是一个直接的答案,但它可能有助于更好地识别问题,并且它包含代码,因此它作为答案发布 我的建议是尝试识别编码错误的名称的来源。假设您没有名为“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))
这应该会显示从中获取编码错误的文件。在类似循环中连接25个大型csv文件时,我遇到了与pd.concat()相同的问题。在我的例子中,它们有西班牙语字符('ñ'和'ón')。正如Serge所暗示的,发生这种情况是因为您的一些csv或其中的一部分不遵循您使用pandas的read_csv encoding option(encoding='ISO-8859-1')寻址的相同编码 这对我来说很有效(我想这不是一个快速而肮脏的解决方案): 在创建了“损坏的”concat之后,我使用Python内置的open函数打开了“combined_csv”文件,指定了以下选项(errors='backslashcreplace'),如下所示:
file_name = open('D:\combined.csv', encoding='utf-8', errors = 'backslashreplace')
combined = pd.read_csv(file_name)
然后,我将新的“组合”csv文件保存为:
combined.to_csv(r"D:\combined.csv", encoding='utf-8', index=False)
以下代码段可能有助于识别每个文件的特定编码:
with open('D:\one.csv') as f:
print(f)
或者,您可以找出哪个文件对pd.read_csv的“ISO-8859-1”(拉丁语)响应不好选项,然后在concat之前分别更正它们。但是如果您有许多文件,则该选项可能是惩罚性的。无法使用Python 3.6和pandas 0.23.4复制。您应该显示您正在使用的版本。我正在使用Python 3.7.1和pd。uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuy
glob.glob
。我是否可以连接11个文件并保留特殊字符?UTF8编码根本不起作用“'utf-8'编解码器无法解码第8位的字节0xfc:无效的起始字节”谢谢”