调整pandas read_sql_query NULL 值处理?
Posted
技术标签:
【中文标题】调整pandas read_sql_query NULL 值处理?【英文标题】:Adjust pandas read_sql_query NULL value treatment? 【发布时间】:2015-08-19 13:45:39 【问题描述】:当我这样做时
from sqlalchemy import create_engine
import pandas as pd
engine = create_engine('sqlite://')
conn = engine.connect()
conn.execute("create table test (a float)")
for _ in range(5):
conn.execute("insert into test values (NULL)")
df = pd.read_sql_query("select * from test", engine)
#df = pd.read_sql_table("test", engine)
df.a
结果是一列None
值,而不是float("nan")
。这很烦人,尤其是当您读取具有 NULL 值的浮点列时。
read_sql_table
版本工作正常,因为我想它可以使用类型信息。
有没有一种简单的方法可以调整read_sql_query
以将NULL
值也解释为float("nan")
?
【问题讨论】:
恐怕没有简单的方法。 Pandas 不会转换所有的 None(例如pd.Series([None, None])
给你 None 值而不是 NaN)但将它们保留为对象,read_sql_query
永远不会知道它应该是浮点数。如果你知道哪些列必须是浮动的,则可以在该列上执行df['a'].astype(float)
。
但我同意这是一个问题。用于指定特定列类型的可能关键字参数(如read_csv
中的dtype
)可能在这里有用。您可以随时在github.com/pydata/pandas/issues 上打开问题
或converters
参数,也可以像read_csv
一样
这有什么更新吗?
【参考方案1】:
根据 wesm 在链接页面中的评论,似乎 an issue 被提出,并且类似的东西 - coerce_float
参数 - 在版本 0.7.2 中被添加到 pandas:
嗨亚瑟,我添加了一个选项 coerce_float(在上面的提交中),它转换 Decimal -> float 并用 NaN 填充 None。将 Decimal 转换为 float 仍然非常慢。将成为即将发布的 0.7.2 的一部分
虽然pandas.read_sql_query 0.18.1 docs 中的描述似乎令人困惑:
coerce_float : 布尔值,默认为真
尝试将值转换为非字符串、非数字对象(如 decimal.Decimal)为浮点,这对 SQL 结果集很有用
【讨论】:
对于上面的例子,它似乎没有什么区别:( 这令人失望。它解决了我面临的一个相关问题,所以我认为它值得在这里回答。在您的情况下,我认为您应该在 github 上提出相关问题并使用结果更新/回答问题。 对我的情况也没有影响 这可能是解释:***.com/a/53330130/1509695以上是关于调整pandas read_sql_query NULL 值处理?的主要内容,如果未能解决你的问题,请参考以下文章
pandas.read_sql_query() 如何查询 TEMP 表?
相当于 numpy 数组的 pandas read_sql_query?
将列表绑定到 Pandas read_sql_query 中的参数与其他参数