我使用mariadb服务器,尝试连接数据并将其放入python中的pandasDataframe中。
mariadb如下所示:
CREATE DATABASE `fhem` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;
和table在一起 current
以及 history
.
CREATE TABLE `fhem`.`history` (TIMESTAMP TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, DEVICE varchar(64), TYPE varchar(64), EVENT varchar(512), READING varchar(64), VALUE varchar(128), UNIT varchar(32));
我可以用python成功连接:
import pandas as pd
import sqlalchemy as db
engine = db.create_engine('mysql+mysqlconnector://user:pass@192.168.37.33:3306/fhem')
data = pd.read_sql_table('history', engine)
Dataframe具有正确的标头:
['TIMESTAMP', 'DEVICE', 'TYPE', 'EVENT', 'READING', 'VALUE', 'UNIT']
但是单元格的格式不正确。他们看起来像
[50, 50, 46, 51]
应该是这样的
"on" or "off"
如果我在终端上用mysql-u用户进行查询。。从历史中选择;我得到了正确的数据。我试图补充
engine = db.create_engine('mysql+mysqlconnector://user:pass@192.168.37.33:3306/fhem', encoding='utf8')
engine = db.create_engine('mysql+mysqlconnector://user:pass@192.168.37.33:3306/fhem?charset=utf8')
但这也无济于事。唯一正确显示的列是 TIMESTAMP
.
我能做的是:
for l in data['VALUE'].values:
x = l.decode('utf-8')
print(x)
我可以对我感兴趣的每一个专栏都这样做,而不是把它添加到一个新的df中,但我想一定有更好的方法。你能帮助我吗?
编辑
我有以下选择:
print(data['VALUE'])
for l in data['VALUE']:
print(l)
for l in data['VALUE']:
print(l.decode('utf-8'))
最后一个,是我瞄准的df。我试过了
data['VALUE'].apply(lambda x: x.decode('utf-8'))
什么都不做。我正在运行pandas 0.23.4和sqlalchemy 1.2.12
费边
1条答案
按热度按时间biswetbf1#
我的系统运行在vmubuntu18.04 lts上。我现在已经使用anaconda和python3.6切换到windows,没有这样的问题。我第一次得到正确的值。
费边