gpt4 book ai didi

Python Pandas 使用 NaN 值写入 sql

转载 作者:IT王子 更新时间:2023-10-28 23:46:06 24 4
gpt4 key购买 nike

我正在尝试从 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

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)。
Pandas 0.15 将于 10 月发布,该功能已合并到开发版本中。


这可能是由于您的表中的 NaN 值,这是目前已知的缺点,即 pandas sql 函数不能很好地处理 NaN(https://github.com/pydata/pandas/issues/2754https://github.com/pydata/pandas/issues/4199)

目前作为一种解决方法(对于 pandas 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')

关于Python Pandas 使用 NaN 值写入 sql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23353732/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com