在写入需要 type:float 以外的其他内容的数据库时如何处理 NaN 值?
How to handle NaN values when writing to a database which expects something else than type:float?
我正在处理抓取项目,并且正在使用 Postgres。我已经手动设置了所有 table,其中包括日期时间、整数、文本和浮点数等典型数据类型。
但是我运行遇到了一个问题。由于我刮了很多字段,所以总是缺少一些字段,它们变成了nan。由于 nan 是 float 类型,当我尝试将 float 值推入需要日期时间或文本对象的 Column 时收到错误消息。
至少我是这么认为的。错误信息不是很清楚。
在我通过 SQLAlchemy 的 declarative_base
.
创建了 table 之后,我基本上只使用 Pandas (df.to_sql
)
我的流程是这样的:
obj = Scrape() # Scrape() includes all relevant methods
obj.get_data()
obj.create_a_df()
obj.df.to_sql('table', con=engine, [...])
只要当前抓取 (obj.get_data()
) 中的值不存在,它就会变为 nan
。由于 nan
的类型为 float,我无法将其 post 放入 table 中,它期望除 float 之外的任何其他内容。
Error:
[SQL: INSERT INTO company_statistics (my column name) VALUES (my df_columns)] [parameters:
{my data as dictionary}]
(Background on this error at: https://sqlalche.me/e/14/9h9h)
不能很好地诊断它,但我希望它是上述原因。有什么办法吗? df.fillna(None)
是否有意义,或者是否有任何我不知道的可用关键字?
删除 NaN
不会解决这个问题吗?使用 .fillna()
会将所有 NaN
值替换为您在其中声明的任何值。你可以把它放在你的抓取方法中。
你也可以考虑obj.df.dropna(inplace=True)
。这将简单地删除任何列中包含 NaN
的所有行。
我正在处理抓取项目,并且正在使用 Postgres。我已经手动设置了所有 table,其中包括日期时间、整数、文本和浮点数等典型数据类型。
但是我运行遇到了一个问题。由于我刮了很多字段,所以总是缺少一些字段,它们变成了nan。由于 nan 是 float 类型,当我尝试将 float 值推入需要日期时间或文本对象的 Column 时收到错误消息。
至少我是这么认为的。错误信息不是很清楚。
在我通过 SQLAlchemy 的 declarative_base
.
df.to_sql
)
我的流程是这样的:
obj = Scrape() # Scrape() includes all relevant methods
obj.get_data()
obj.create_a_df()
obj.df.to_sql('table', con=engine, [...])
只要当前抓取 (obj.get_data()
) 中的值不存在,它就会变为 nan
。由于 nan
的类型为 float,我无法将其 post 放入 table 中,它期望除 float 之外的任何其他内容。
Error:
[SQL: INSERT INTO company_statistics (my column name) VALUES (my df_columns)] [parameters:
{my data as dictionary}]
(Background on this error at: https://sqlalche.me/e/14/9h9h)
不能很好地诊断它,但我希望它是上述原因。有什么办法吗? df.fillna(None)
是否有意义,或者是否有任何我不知道的可用关键字?
删除 NaN
不会解决这个问题吗?使用 .fillna()
会将所有 NaN
值替换为您在其中声明的任何值。你可以把它放在你的抓取方法中。
你也可以考虑obj.df.dropna(inplace=True)
。这将简单地删除任何列中包含 NaN
的所有行。