2015-09-21 73 views
1

我试图将结果输出到熊猫数据框中。当我打印数据框时,对象值显示正确,但是当我在数据框上使用to_csv函数时,我的csv输出只有每个字符串/对象值的第一个字符。Python Pandas to_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优胜美地(10.10.5)
  • Python 2.7.10 | Anaconda 2.3.0(x86_64)| (默认情况下,2015年9月15日, 14时29分08秒)
  • pyodbc 3.0.10
  • 大熊猫0.16.2
  • ODBC:Vertica的ODBC 6.1.3

任何帮助搞清楚如何使用熊猫中的to_csv函数传递整个对象字符串将不胜感激。

+0

这可以与被复制'DF = pd.DataFrame({ 'A':[u'u \ x00s \ X00' ] })','df.to_csv()'(sql部分并不重要) – joris

+0

thanks @joris - 我已更新了问题以简化它并反映了核心问题 –

+2

unicode字符串中的反斜杠需要转义。 'df = pd.DataFrame({'a':[u'u \\ x00s \\ x00']})'返回一个正确写出'u \ x00s \ x00'的数据框。 – dagrha

回答

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的问题,我不得不把编码变更为UTF-16文件/库/ Vertica的/ ODBC/lib目录/ Vertica的中的.ini低于

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

此致的结构中,
安德森内韦斯