当前位置: 首页 > 面试题库 >

Python Pandas使用NaN值写入sql

松英叡
2023-03-14
问题内容

我正在尝试从ascii读取几百张表,然后将它们写入mySQL。使用Pandas似乎很容易,但是我遇到了一个对我来说没有意义的错误:

我有一个8列的数据框。这是列列表/html" target="_blank">索引:

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

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你的表值,这是目前该大熊猫SQL函数不处理的NaN以及一个已知的缺点(https://github.com/pydata/pandas/issues/2754,HTTPS:/
/github.com/pydata/pandas/issues/4199

作为目前的一种解决方法(对于0.14.1及更低版本的熊猫),您可以使用以下方法将nan值手动转换为None:

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')


 类似资料:
  • 本文向大家介绍在JavaScript中使用NaN值的方法,包括了在JavaScript中使用NaN值的方法的使用技巧和注意事项,需要的朋友参考一下  不带引号的字面常量NaN是一个特殊的值,表示不是非数字。由于NaN总是比较不等的情况,以任何数,包括NaN,它通常是用于指示应该返回一个有效的数的函数的错误条件。 注意:使用isNaN()全局函数来查看是否值是NaN值。 语法 您可以使用以下语法访问

  • 我使用的是ElasticSearch 2.3.3,我有以下聚合: 为了更好地理解,我在字段名中添加了后缀,它告诉字段映射: _i=整数 _l=long(时间戳) 聚合响应是: 我的问题是聚合,有时具有的值,因为父聚合有0个匹配的文档,然后的结果将始终在“asc”和“desc”顺序上垫底。 我尝试在聚合中添加,但它仍然返回一个。 你能帮我按中位数时间对我的桶进行排序吗,当它“asc”排序值将排在第一

  • 本文向大家介绍R使用NA值读取和写入数据,包括了R使用NA值读取和写入数据的使用技巧和注意事项,需要的朋友参考一下 示例 使用read.*函数读取表格数据集时,R自动查找看起来像的缺失值"NA"。但是,缺失值并不总是由表示NA。有时,点(.),连字符(-)或字符值(例如:)empty表示值是NA。该函数的na.strings参数read.*可用于告诉R需要将哪些符号/字符视为NA值: 还可能表明需

  • 问题内容: 我的pandas DataFrame主要填充了实数,但是其中也包含一些nan值。 如何nan用列的平均值替换s? 这个问题与这个问题非常相似:numpy array:用列的平均值替换nan值, 但是不幸的是,给出的解决方案不适用于pandas DataFrame。 问题答案: 你可以直接使用来nan直接填充: 的文档字符串说,应该是一个标量或快译通,但是,它似乎工作用为好。如果你想通过

  • 我有一个pandas DataFrame,其中大部分都是实数,但也有一些值。

  • 假设我初始化一个空数据帧如下: 生成的具有以下形式 有没有一种pythonic方法可以将s替换为其他值,例如?当然,一种方法是简单地将其指定为数据: 也许有更简洁的方法?