不同编码怎么办

What to do with different encoding

我有一个编码为 UTF-8 的数据帧和另一个编码为 ascii 的数据帧。

我将它们与以下代码合并:

merge1 = pd.concat([pd.read_csv(comment_csv, sep=';', header=None, encoding = "ISO-8859-1") for comment_csv in comment_csv])

最终使用 encoding=UTF-8 的那个创建了以下奇怪的令牌:¶

最好的主意是什么。

UTF-8 是一种具有特定规则的编码,很容易被其他编码所违反,而 ISO-8859-1 (a.k.a Latin-1) 可以解码任何内容,但只有在文件是纯净的情况下才能正确解码ASCII 或者实际上是 Latin-1-encode。因此,如果您知道您的文件只有一个或另一个,请先使用 UTF-8 解析,如果失败则使用 Latin-1。

确保编码是真的 iso-8859-1 and not Windows-1252。后者在 Windows 上很常见,并且与 ISO-8859-1 不完全兼容。有关详细信息,请参阅链接。

示例数据文件:

data\latin1.csv(以iso-8859-1编码保存):

Col1,Col2
penguin,pingüino

data\utf8.csv(以utf8编码保存):

Col1,Col2
Hello,你好

test.py

import pandas as pd
import os

def filenames(root):
    for path,dirs,files in os.walk(root):
        for file in files:
            yield os.path.join(path,file)

def read_csv(filename):
    try:
        return pd.read_csv(filename,encoding='utf8')
    except UnicodeDecodeError:
        return pd.read_csv(filename,encoding='latin1')

merge = pd.concat([read_csv(filename) for filename in filenames('data')])
print(merge)

输出:

      Col1      Col2
0  penguin  pingüino
0    Hello        你好