从pandas读取时,MS SQL Server Management Studio导出到CSV会引入额外的字符

时间:2014-08-27 13:21:49

标签: python pandas ssms

我正在使用MS SQL Server Management Studio,我有一个包含以下数据的简单表:

CountryId     CommonName  FormalName
---------     ----------  ----------
        1    Afghanistan  Islamic State of Afghanistan
        2        Albania  Republic of Albania
        3        Algeria  People's Democratic Republic of Algeria
        4        Andorra  Principality of Andorra

我使用“将结果另存为”使用默认的UTF8编码将此数据保存到countries.csv。然后我进入iPython并使用pandas将其读入数据框:

df = pd.read_csv("countries.csv")

如果我这样做

df.columns

我明白了:

Index([u'CountryId', u'CommonName', u'FormalName'], dtype='object')

奇怪的是,当我复制列名称时,将其粘贴到一个新单元格中,然后按Enter键,我得到:

u'\ufeffCountryId', u'CommonName', u'FormalName'

unicode字符\ufeff显示在第一列名称的开头。

我尝试了不同表格的程序,每次我得到额外的字符。它只发生在第一个列名称上。

有人可以向我解释为什么会出现额外的unicode角色吗?

1 个答案:

答案 0 :(得分:3)

尝试将encoding = "utf-8-sig"选项与read_csv一起使用。例如:

df = pd.read_csv("countries.csv", encoding = "utf-8-sig")

这应该让它忽略CSV文件开头的Unicode字节顺序标记(BOM)。这里不需要使用BOM作为UTF-8文件没有字节顺序,但Microsoft工具喜欢用它作为幻数来识别UTF-8编码的文本文件。