簡體   English   中英

Python 2.7 - 帶有來自 pyodbc 的數據的 Pandas UnicodeEncodeError

[英]Python 2.7 - Pandas UnicodeEncodeError with data from pyodbc

我正在嘗試使用 pyodbc 從 SQL Server 中提取數據並將其加載到數據幀中,然后將其導出到 HTML 文件,但我一直收到以下 Unicode 錯誤:

UnicodeEncodeError: 'ascii' codec can't encode character u'\u2019' in position 15500: ordinal not in range(128)

這是我當前的設置(每個文檔的編碼說明):

cnxn =  pyodbc.connect('DSN=Planning;UID=USER;PWD=PASSWORD;')
cnxn.setdecoding(pyodbc.SQL_CHAR, encoding='cp1252', to=unicode)
cnxn.setdecoding(pyodbc.SQL_WCHAR, encoding='cp1252', to=unicode)
cnxn.setdecoding(pyodbc.SQL_WMETADATA, encoding='cp1252', to=unicode)
cnxn.setencoding(str, encoding='utf-8')
cnxn.setencoding(unicode, encoding='utf-8')
cursor = cnxn.cursor()

with open('Initial Dataset.sql') as f:
    initial_query = f.read()

cursor.execute(initial_query)
columns = [column[0] for column in cursor.description]
initial_data = cursor.fetchall()
i_df = pd.DataFrame.from_records(initial_data, columns=columns)
i_df.to_html('initial.html')

一個奇怪但有用的注意點是,當我嘗試導出 CSV 時:

i_df.to_csv('initial.csv')

我得到同樣的錯誤,但是當我添加:

i_df.to_csv('initial.csv', encoding='utf-8')

有用。 有人可以幫我理解這個編碼問題嗎?

附注:我使用也嘗試sqlalchemy連接和pandas.read_sql()和相同的錯誤仍然存在。

關於這個問題的第二個答案似乎是一個可以接受的解決方法,除了 Python 2.x 用戶,你必須使用io ,所以:

import io

html = df.to_html()
with io.open("mypage.html", "w", encoding="utf-8") as file:
    file.write(html)

它沒有包含在最新版本中,但看起來下一版本的pandas將具有to_html()encoding選項,請參閱文檔(第 2228 行)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM