Python Pandas to_csv输出返回字符串/对象值的单个字符

时间:2015-09-21 20:06:20

标签: python-2.7 pandas unicode pyodbc vertica

我正在尝试将结果输出到pandas数据框中。当我打印数据框时,对象值显示正确,但是当我在数据框上使用to_csv函数时,我的csv输出只有每个字符串/对象值的第一个字符。

df = pandas.DataFrame({'a':[u'u\x00s\x00']})
df.to_csv('test.csv')

我还尝试了以下对to_csv函数的补充:

df.to_csv('test_encoded.csv', encoding= 'utf-8')

但我得到了相同的结果:

>>> print df
      a
0  us

(output in csv file)
u

作为参考,我正在连接到Vertica数据库并使用以下设置:

  • 操作系统:Mac OS X Yosemite(10.10.5)
  • Python 2.7.10 | Anaconda 2.3.0(x86_64)| (默认,2015年9月15日, 14时29分08秒)
  • pyodbc 3.0.10
  • pandas 0.16.2
  • ODBC:Vertica ODBC 6.1.3

任何有关如何使用pandas中的to_csv函数传递整个对象字符串的帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,发现了这篇文章UTF-32 in Python

要解决您的问题,我相信您需要更换所有' \ x00 '通过清空。我设法使用下面的代码编写正确的CSV

fixer = dict.fromkeys([0x00], u'')
df['a'] = df['a'].map(lambda x: x.translate(fixer))
df.to_csv('test.csv')

要解决我的Vertica问题,我必须将文件 /Library/Vertica/ODBC/lib/vertica.ini 中的编码更改为 UTF-16 下面的配置

[Driver]
ErrorMessagesPath=/Library/Vertica/ODBC/messages/
ODBCInstLib=/usr/lib/libiodbcinst.dylib
DriverManagerEncoding=UTF-16

最好的问候,
安德森·内维斯