不同编码怎么办
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 你好
我有一个编码为 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 你好