Pandas 通过 SQL Alchemy 到 Oracle:UnicodeEncodeError:'ascii' 编解码器无法编码字符

Dan*_*ty2 2 oracle sqlalchemy python-3.x

使用熊猫 18.1...

我正在尝试遍历 CSV 文件夹来读取每个 CSV 并将其发送到 Oracle 数据库表。我的众多 CSV 之一中潜伏着一个非 ASCII 字符(更像是陶醉在我的痛苦中)。我不断收到此错误:

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

这是代码:

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')
Run Code Online (Sandbox Code Playgroud)

我尝试过以下方法:

  1. coding=utf-8 (在引擎中,如果我在 read_csv 中这样做,它会抛出错误)
  2. 在引擎中的“service_name”后面添加 ?encoding=utf8
  3. 使用 df=df.astype('unicode') (而不是)

我想做的: 用其他字符替换不可读的字符,最重要的是,继续向 Oracle 发送数据。

笔记:

我使用的数据文件来自 cms.gov 网站。这是一个带有示例的 zip 文件。我正在使用“contracts_info”文件。

提前致谢!

Vol*_*okh 5

您需要像这样设置 NLS_LANG 环境变量:

os.environ['NLS_LANG']= 'AMERICAN_AMERICA.AL32UTF8'
Run Code Online (Sandbox Code Playgroud)

那么就不会出现这个错误了。