2015-09-21 29 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 

此致的結構中,
安德森內韋斯