2016-04-21 79 views
0

使用大熊貓18.1 ...熊貓通過SQL鍊金術甲骨文:UnicodeEncodeError:「ASCII」編解碼器不能編碼字符

我試圖通過CSV中的文件夾重複讀取每個CSV並將其發送到一個Oracle數據庫表。潛伏在我的許多CSV中的一個非ascii角色(更像是沉浸在我的痛苦中)。我不斷收到此錯誤:

UnicodeEncodeError: 'ascii' codec can't encode character '\xab' in position 8: 
ordinal not in range(128) 

下面的代碼:

import pandas as pd 
import pandas.io.sql as psql 
from sqlalchemy import create_engine 
import cx_Oracle as cx 

engine = create_engine('oracle+cx_oracle://schema:'+pwd+'@server:port/service_name' 
,encoding='latin1') 

name='table' 
path=r'path_to_folder' 
filelist = os.listdir(path) 

for file in filelist: 
    df = pd.read_csv(pathc+'\\'+file,encoding='latin1',index_col=0) 
    df=df.astype('unicode') 
    df['date'] = pd.to_datetime(df['date']) 
    df['date'] = pd.to_datetime(df['Contract_EffDt'],format='%YYYY-%mm-%dd') 
    df.to_sql(name, engine, if_exists = 'append') 

我已經試過如下:

  1. 編碼= UTF-8(在發動機,如果我這樣做在read_csv中,它會引發錯誤)
  2. 在引擎中的「service_name」之後添加?encoding = utf8
  3. 使用df = df.as類型(「統一」)(不)

我想要做什麼: 用別的東西,最重要的,繼續將數據發送到Oracle替換不可讀字符。

注意:

我使用的數據文件來自cms.gov網站。 Here's a zip file with an example。我正在使用「contracts_info」文件。

提前致謝!

回答

0

我編碼字符串字段爲UTF-8單獨,這可能幫助(發生了新的錯誤,但我認爲它沒有與此相關的):

dfc['Organization Type'] = dfc['Organization Type'].str.encode('utf-8') 

新的錯誤:

DatabaseError: (cx_Oracle.DatabaseError) ORA-00904: "Contract_ID": invalid identifier 

這是因爲「Contract_ID」未被設置爲索引。一旦我做到了,一切都進展順利(除了比糖蜜慢,這開始了我的下一次冒險)。

相關問題