Python Pandas read\u sql\u查询对某些列中的所有值返回无
我使用pandas read_sql_query将MySQL数据库表中的数据读取到pandas数据框中。此表中的某些列具有所有空值。对于这些列,pandas dataframe在每一行中都不包含任何内容。对于所有其他列,dataframe包含有空值的NaN。有人能解释一下为什么对all NULL列不返回任何值吗?我如何确保我拥有所有的NAN,希望不用手动转换? 我应该补充一点,导致此问题的两列是float,第三列是double类型 编辑 这里有一个例子。列pef和fer包含数据库中的所有空值Python Pandas read\u sql\u查询对某些列中的所有值返回无,python,pandas,sqlalchemy,nan,nonetype,Python,Pandas,Sqlalchemy,Nan,Nonetype,我使用pandas read_sql_query将MySQL数据库表中的数据读取到pandas数据框中。此表中的某些列具有所有空值。对于这些列,pandas dataframe在每一行中都不包含任何内容。对于所有其他列,dataframe包含有空值的NaN。有人能解释一下为什么对all NULL列不返回任何值吗?我如何确保我拥有所有的NAN,希望不用手动转换? 我应该补充一点,导致此问题的两列是float,第三列是double类型 编辑 这里有一个例子。列pef和fer包含数据库中的所有空值 f
from sqlalchemy import create_engine
import pandas as pd
import math
querystr = "SELECT * FROM dbname.mytable"
engine = create_engine('mysql+pymysql://username:password@localhost/' + "dbname")
df = pd.read_sql_query(querystr, engine)
df.head()
sys dias pef fer
0 NaN NaN None None
1 159.0 92.666 None None
2 NaN NaN None None
3 NaN NaN None None
4 102.0 63.333 None None
在MySQL数据库中,这些列定义为:
Columns:
sys float
dias float
pef float
fer float
我希望pef和fer列在每一行中都包含NaN,而不是None。这个问题是一个开放的问题,在这里解释如下: read\u sql\u查询只返回结果集,没有任何列类型 信息。如果您使用read_sql_table函数,它将使用 通过SQLAlchemy获取列类型信息 似乎
read\u sql\u query
只检查列中返回的前3个值,以确定列的类型。因此,如果前3个值为NULL
,则无法确定列的类型,因此返回None
因此,部分解决方法是使用read\u sql\u table
。我将代码改为使用read\u sql\u table
,即使对于所有NULL
列,它也会按预期返回NaN值。但在我的实际应用程序中,我确实需要使用read\u sql\u query.
因此,一旦返回结果,我现在就用NaN替换任何None值:
df.replace([None], np.nan, inplace=True)
我尝试使用read_sql_表,但它无法解决我的问题。此外,我发现接受的答案实际上会产生其他问题 对于我的数据,Panda认为只有对象列才有“None”而不是NaN。对于datetime,缺失为NaT;对于float,丢失的是NaN read_sql_表不适用于我,返回的问题与read_sql相同。因此,我尝试了接受的答案并运行df.replace([None],np.nan,inplace=True)。这实际上将所有缺少数据的datetime对象更改为对象数据类型。因此,现在我必须将它们改回datetime,这可能会因数据的大小而增加负担 相反,我建议您首先确定df中的object dtype字段,然后替换None:
obj_columns = list(df.select_dtypes(include=['object']).columns.values)
df[obj_columns] = df[obj_columns].replace([None], np.nan)
您能否添加一个最简单的示例,说明数据在数据库中的外观、使用Pandas解析数据时的外观以及您希望数据的显示方式?只需编辑您的问题,将这些+您当前正在使用的任何代码包括在内。非常有用。但是出于兴趣,为什么你真的需要在你的应用程序中使用read\u sql\u query而不是read\u sql\u table?@Andy,一个例子:如果你只需要表的一个子集,并且读取完整的表也会返回记录,那么你就不能使用
read\u sql\u table
。