Pandas None 值与空数据框

Pandas None values vs Empty dataframe

我有两个不同结果的查询,因为 pandas 数据框中没有数据。

第一次查询:

with self.connection as conn:
            query = f"""SELECT current_client_name, client_phone_number, profile, effective_date, effective_time, 
                                          client_details.telegram_id, telegram_reference
                                          FROM `clients` JOIN `client_details` 
                                         ON clients.telegram_id=client_details.telegram_id 
                                         WHERE `status` = \'{status}\' order by effective_date"""
            df_result = pd.read_sql_query(query, conn)
            return df_result

在没有找到记录的结果中,我看到了空数据框:

Empty DataFrame
Columns: [current_client_name, client_phone_number, profile, effective_date, effective_time, telegram_id, telegram_reference]
Index: []

并且可以在下一个条件下捕获空数据帧:

if df.empty is True:

第二次查询

with self.connection as conn:
            query = f"SELECT MAX(effective_date), effective_time FROM `client_details` WHERE `telegram_id` = {telegram_id} " \
                    f"and (`status` = \'WAIT\' or `status`= \'APPROVED\')"
            df_result = pd.read_sql_query(query, conn)
            return df_result

这个查询出于某些原因 return 我不是空数据框,而是列中有 None 的数据框

df MAX(effective_date) effective_time
0                None           None

此结果无法用下一个代码处理,因为某些原因 returned is not empty dataframe!

if df.empty is True:

有人知道为什么会这样吗:为什么 return 在某些情况下是空数据框,为什么 return 数据框在列中输入 None?如何避免或处理这种情况?

谢谢

在第一种情况下,您的查询没有 return 任何结果,因此您的 df 中没有任何条目。

在第二种情况下,您的查询 return 是一个结果,但是这些字段在您的 SQL 数据库中是空的,因此您有一个非空的 DataFrame,其中包含 None 个值.

取决于您是否只需要包含所有非空值的行(例如,示例中的两列都必须为非空),或者某些空值是否可以(例如,其中一列为 Null,而另一列非空),您可以删除包含这些 None 值的行:

删除包含任何 None 值的行:

df = df.dropna(how = 'any')

要删除仅包含 None 个值的行:

df = df.dropna(how = 'all')

那么检查 if df.empty 应该是正确的。