use*_*876 10 python mysql sql pandas
我正在尝试从ascii读取几百个表,然后将它们写入mySQL.使用Pandas似乎很容易,但我遇到了一个对我没有意义的错误:
我有一个8列的数据框.这是列列表/索引:
metricDF.columns
Index([u'FID', u'TYPE', u'CO', u'CITY', u'LINENO', u'SUBLINE', u'VALUE_010', u'VALUE2_015'], dtype=object)
Run Code Online (Sandbox Code Playgroud)
然后我用to_sql它将数据附加到mySQL
metricDF.to_sql(con=con, name=seqFile, if_exists='append', flavor='mysql')
Run Code Online (Sandbox Code Playgroud)
我得到一个关于列"nan"的奇怪错误:
OperationalError: (1054, "Unknown column 'nan' in 'field list'")
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我的所有列都有名称.我意识到mysql/sql支持写在开发中出现所以也许这就是原因?如果有的话有解决方法吗?任何建议将不胜感激.
jor*_*ris 26
更新:从pandas 0.15开始,to_sql支持写入NaN值(它们将NULL在数据库中编写),因此不再需要下面描述的解决方法(请参阅https://github.com/pydata/pandas/pull/8208).
Pandas 0.15将于今年10月发布,该功能将在开发版本中合并.
这可能是由于NaN你的表值,这就是那个熊猫SQL函数不处理好的NaN此刻一个已知的缺点(https://github.com/pydata/pandas/issues/2754,HTTPS:/ /github.com/pydata/pandas/issues/4199)
作为此时的解决方法(对于pandas版本0.14.1及更低版本),您可以手动将nan值转换为None:
df2 = df.astype(object).where(pd.notnull(df), None)
Run Code Online (Sandbox Code Playgroud)
然后将数据帧写入sql.但是,这会将所有列转换为对象dtype.因此,您必须基于原始数据帧创建数据库表.例如,如果您的第一行不包含NaNs:
df[:1].to_sql('table_name', con)
df2[1:].to_sql('table_name', con, if_exists='append')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17001 次 |
| 最近记录: |