我正在尝试从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)
然后to_sql,我使用追加数据到mySQL
to_sql
metricDF.to_sql(con=con, name=seqFile, if_exists='append', flavor='mysql')
我收到关于列为“ nan”的奇怪错误:
OperationalError: (1054, "Unknown column 'nan' in 'field list'")
如您所见,我所有的列都有名称。我意识到mysql / sql对编写的支持出现在开发中,所以也许这是原因?如果是这样,是否可以解决?任何建议将不胜感激。
更新 :从pandas 0.15开始,to_sql支持写入NaN值(它们将NULL在数据库中写入),因此不再需要下面描述的解决方法(请参阅https://github.com/pydata/pandas/pull/8208)。 熊猫0.15将于10月发布,并且该功能已合并到开发版本中。
NaN
NULL
这可能是由于NaN你的表值,这是目前该大熊猫SQL函数不处理的NaN以及一个已知的缺点(https://github.com/pydata/pandas/issues/2754,HTTPS:/ /github.com/pydata/pandas/issues/4199)
作为目前的一种解决方法(对于0.14.1及更低版本的熊猫),您可以使用以下方法将nan值手动转换为None:
nan
df2 = df.astype(object).where(pd.notnull(df), None)
然后将数据帧写入sql。但是,这会将所有列转换为对象dtype。因此,您必须基于原始数据框创建数据库表。例如,如果您的第一行不包含NaNs:
df[:1].to_sql('table_name', con) df2[1:].to_sql('table_name', con, if_exists='append')