У меня есть пример кода, как указано ниже, считывая данные из базы данных sqlite и импортируя его в некоторый фрейм данных pandas.UnicodeEncodeError только на некоторых компьютерах
Когда я запустить его на своем рабочем столе, он печатает желаемый результат
Datenbank anlegen
Datum Name
0 160105 12351.3
Однако, запустив его на моем ноутбуке, я получаю предупреждение Unicode:
2.7.6 (default, Nov 10 2013, 19:24:18) [MSC v.1500 32 bit (Intel)]
Python Type "help", "copyright", "credits" or "license" for more information.
[evaluate 2016-01-10 Test PD.py]
C:\Python27\lib\pkgutil.py:380: UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode - interpreting them as being unequal
importer = sys.path_importer_cache[path_item]
Traceback (most recent call last):
File "C:\Users\....\2016-01-10 Test PD.py", line 2, in <module>
import pandas as pd
File "C:\Python27\Lib\site-packages\pandas\__init__.py", line 13, in <module>
from pandas import hashtable, tslib, lib
File "C:\.....\pandas\tslib.pyx", line 61, in init pandas.tslib (pandas\tslib.c:103021)
File "C:\Python27\Lib\site-packages\pytz\__init__.py", line 31, in <module>
from pkg_resources import resource_stream
File "C:\Python27\Lib\site-packages\pkg_resources.py", line 2829, in <module>
working_set = WorkingSet._build_master()
File "C:\Python27\Lib\site-packages\pkg_resources.py", line 440, in _build_master
ws = cls()
File "C:\Python27\Lib\site-packages\pkg_resources.py", line 433, in __init__
self.add_entry(entry)
File "C:\Python27\Lib\site-packages\pkg_resources.py", line 489, in add_entry
for dist in find_distributions(entry, True):
File "C:\Python27\Lib\site-packages\pkg_resources.py", line 1817, in find_distributions
importer = get_importer(path_item)
File "C:\Python27\Lib\pkgutil.py", line 387, in get_importer
importer = path_hook(path_item)
UnicodeEncodeError: 'ascii' codec can't encode character u'\xfc' in position 44: ordinal not in range(128)
Сценарий проходит через без ошибки на ноутбуке, когда я бегу через него шаг за шагом с моим отладчиком (wingide).
import sqlite3 as lite
import pandas as pd
import os
db_filename = "Test.db"
if not os.path.isfile(db_filename):
con = lite.connect(db_filename)
print "Datenbank anlegen"
try:
with con:
cur = con.cursor()
cur.execute("CREATE TABLE Testtab(Datum TEXT, Name TEXT)")
Datum= "160105"
Name= "12351.3*ABC"
cur.execute("INSERT INTO Testtab VALUES(?,?)",(Datum, Name))
except lite.Error, e:
print "Error 1: %s:" % e.args[0]
sys.exit(1)
con = lite.connect(db_filename)
with con:
query = '''SELECT *
FROM Testtab'''
df = pd.read_sql(query, con)
# DF konvertieren
df['Name']=df['Name'].str[:-4].astype(float)
print df
панда и NumPy новее на ноутбуке (панды 0.17.1 вместо 0.15.2, Numpy 1.7.1 вместо 1.6.2).
Кажется, что данные записываются в базу данных sqlite как unicode, а pd.read_sql каким-то образом не нравится.
Немного потеряно здесь, любая помощь оценена.
Спасибо, Томас
Звучит как разные наборы кодов на каждом, может даже быть шрифтом. Вы проверяли локали? – cdarke
Это может быть связано с изменением версий, как вы упомянули. У меня была такая же проблема с картой поведения. Попробуйте запустить с pandas 0.15.2 версия – keya
@cdark: теперь я добавил "import locale locale.setlocale (locale.LC_ALL, 'deu_deu')" на обоих компьютерах, ничего не меняет. Это то, что вы имеете в виду? – tfv