2015-09-21 1 views
1

Я пытаюсь вывести результат в рамку данных pandas. Когда я печатаю фрейм данных, значения объекта отображаются правильно, но когда я использую функцию to_csv в кадре данных, мой вывод csv имеет только первый символ для каждого значения строки/объекта.Python Pandas to_csv Output Возвращает одиночный символ для значений String/Object

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) | (По умолчанию, 15 сентября 2015, 14:29:08)
  • pyodbc 3.0.10
  • панд 0.16.2
  • ODBC: Vertica ODBC 6.1.3

Любая помощь выяснить, как передайте всю строку объекта с помощью функции to_csv в пандах.

+0

Это может быть воспроизведен с помощью 'DF = pd.DataFrame ({ 'а': [u'u \ x00s \ x00' ] }) ',' df.to_csv() '(часть sql на самом деле не имеет значения) – joris

+0

thanks @joris - я обновил вопрос, чтобы упростить его и отразить основную проблему. –

+2

Обратные косые черты в строке юникода должны быть экранированы , '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 в файле /Library/Vertica/ODBC/Библиотека/Vertica .ini с конфигурацией ниже

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

наилучшими пожеланиями,
Anderson Neves