【发布时间】: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一样 -
这有什么更新吗?