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

时间:2016-04-21 19:23:07

标签: oracle python-3.x sqlalchemy

使用pandas 18.1 ......

我正在尝试遍历CSV文件夹以读取每个CSV并将其发送到Oracle数据库表。在我的许多CSV之一中潜伏着一个非ascii角色(更喜欢陶醉于我的痛苦中)。我一直收到这个错误:

<set/>

以下是代码:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:state_enabled="true" android:state_pressed="true">
            <objectAnimator
                android:duration="@android:integer/config_shortAnimTime"
                android:propertyName="translationZ"
                android:valueTo="15dp"
                android:valueType="floatType" />
        </item>
        <item>
            <objectAnimator
                android:duration="@android:integer/config_shortAnimTime"
                android:propertyName="translationZ"
                android:valueTo="5dp"
                android:valueType="floatType" />
        </item>
    </selector>
</set>

我尝试了以下内容:

  1. encoding = utf-8(在引擎中,如果我在read_csv中执行此操作,则会抛出错误)
  2. 在引擎中的“service_name”之后添加?encoding = utf8
  3. 使用df = df.astype('unicode')(而不是)
  4. 我想做什么: 用其他东西替换不可读的字符,最重要的是,继续向Oracle发送数据。

    注意:

    我使用的数据文件来自cms.gov网站。 Here's a zip file with an example。我正在使用“contracts_info”文件。

    提前致谢!

2 个答案:

答案 0 :(得分: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”未设置为索引。一旦我这样做,一切顺利(除了比糖蜜慢,这开始了我的下一次冒险)。

答案 1 :(得分:0)

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

os.environ['NLS_LANG']= 'AMERICAN_AMERICA.AL32UTF8'

那么就不会发生错误。