我df.to_sql(con=con_mysql, name='testdata', if_exists='replace', flavor='mysql')
用来将数据框导出到mysql中。但是,我发现具有长字符串内容(例如url)的列被截断为63位数字。导出时,我从ipython笔记本收到以下警告:
/usr/local/lib/python2.7/site-
packages/pandas/io/sql.py:248:警告:第3行cur.executemany(insert_query,data)的列’url’的数据被截断了
对于不同的行,还存在其他相同样式的警告。
有什么我可以调整的方法来正确导出完整数据吗?我可以在mysql中设置正确的数据架构,然后导出到该数据库。但是我希望进行调整可以使其直接从python运行。
作为一种解决方法,您可能可以monkeypatch该功能get_sqltype
:
from pandas.io import sql
def get_sqltype(pytype, flavor):
sqltype = {'mysql': 'VARCHAR (63)', # <-- change this value to something sufficient higher
'sqlite': 'TEXT'}
if issubclass(pytype, np.floating):
sqltype['mysql'] = 'FLOAT'
sqltype['sqlite'] = 'REAL'
if issubclass(pytype, np.integer):
sqltype['mysql'] = 'BIGINT'
sqltype['sqlite'] = 'INTEGER'
if issubclass(pytype, np.datetime64) or pytype is datetime:
sqltype['mysql'] = 'DATETIME'
sqltype['sqlite'] = 'TIMESTAMP'
if pytype is datetime.date:
sqltype['mysql'] = 'DATE'
sqltype['sqlite'] = 'TIMESTAMP'
if issubclass(pytype, np.bool_):
sqltype['sqlite'] = 'INTEGER'
return sqltype[flavor]
sql.get_sqltype = get_sqltype
然后只需使用您的代码即可:
df.to_sql(con=con_mysql, name='testdata', if_exists='replace', flavor='mysql')
从pandas 0.14
开始,sql模块在后台使用sqlalchemy,并将字符串转换为sqlalchemyTEXT
类型,其中wich转换为mysqlTEXT
类型(而不是VARCHAR
),这也将允许您存储大于63位数字的较大字符串:
engine = sqlalchemy.create_engine('mysql://scott:tiger@localhost/foo')
df.to_sql('testdata', engine, if_exists='replace')
仅当您仍然使用DBAPI连接而不是sqlalchemy引擎时,问题仍然存在,但是不建议使用此选项,建议向提供一个sqlalchemy引擎to_sql
。
问题内容: 我有一个包含文本数据的Python Pandas 对象。我的问题是,当我使用函数时,它会截断输出中的字符串。 例如: 输出在处被截断 关于SO有一个相关问题,但是它使用占位符和搜索/替换功能来对HTML进行后处理,我想避免这种情况: 将Pandas数据框的全部内容写入HTML表 有没有更简单的解决方案来解决这个问题?我从文档中找不到任何相关内容。 问题答案: 您看到的是大熊猫将输出截断
问题内容: 试图使用python将pandas数据框写入MySQL表。以前一直在使用,但是将来会贬值,并希望开始过渡到使用SQLAlchemy引擎。 样例代码: 读取工作正常,但存在错误: DatabaseError:在SQL’SELECT name FROM sqlite_master WHERE type =’table’AND name = ?;’上执行失败:在字符串格式化期间参数数目错误
问题内容: 我有一个看起来像这样的数据框: 也有一个带名为fee_profit的表的sqlite3 db fee_profit有4个栏位: id-整数-主键 perf_period_id-整数 日期-日期 利润-真实 当我尝试将dataframe写入数据库时(不显示db连接): 我得到以下代码: 没有传递主键(这可能是问题吗?)我把桌子弄得乱七八糟,肯定看起来像是问题所在的日期。尝试过在索引中
我试图导出我的数据帧到sql数据库(Postgres)。 我创建了如下表: 我想把这个数据框写到sql表中: 但是,当我运行命令写入数据库时,我意识到已经创建了一个新表"OUTPUT",其中插入了数据。 如何避免在表中插入双引号?
问题内容: 在下面,male_trips是一个大熊猫数据帧,station是一个小熊猫数据帧。对于每个车站ID,我想知道有多少次男性旅行。以下工作可以完成,但是需要很长时间: 我应该怎么做呢? 更新!因此,有两种主要方法:其次是和更简单的方法。我很快完成了,这种方法大获全胜!这是代码: 结果如下: 请注意,以这种速度,用于探索数据 键入 value_counts的速度稍微快一些,而且记不起来了!
问题内容: 我有一个熊猫系列,目前看起来像这样: 我想从根本上将其重塑成一个看起来像这样的数据框… 即。逻辑构造,指出每个观察(行)属于哪个类别。 我能够编写基于循环的代码来解决该问题,但是鉴于我需要处理的行数众多,这将非常缓慢。 有谁知道针对这种问题的矢量化解决方案?我将不胜感激。 编辑:有509个类别,我确实有一个清单。 问题答案: