Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Pandas read\u sql\u查询对某些列中的所有值返回无_Python_Pandas_Sqlalchemy_Nan_Nonetype - Fatal编程技术网

Python Pandas read\u sql\u查询对某些列中的所有值返回无

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

我使用pandas read_sql_query将MySQL数据库表中的数据读取到pandas数据框中。此表中的某些列具有所有空值。对于这些列,pandas dataframe在每一行中都不包含任何内容。对于所有其他列,dataframe包含有空值的NaN。有人能解释一下为什么对all NULL列不返回任何值吗?我如何确保我拥有所有的NAN,希望不用手动转换? 我应该补充一点,导致此问题的两列是float,第三列是double类型

编辑

这里有一个例子。列pef和fer包含数据库中的所有空值

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