在 python 3.8 中将 Access Logic 转换为 Pandas 的问题

Posted

技术标签:

【中文标题】在 python 3.8 中将 Access Logic 转换为 Pandas 的问题【英文标题】:Issue translating Access Logic to Pandas in python 3.8 【发布时间】:2022-01-15 12:30:04 【问题描述】:

我目前正在使用 pandas 将一些项目从 access 数据库转移到 Python 3.8。 我遇到了其中一个查询的逻辑问题。 MSACCESS 查询如下:

UPDATE tblStagingMaternity AS tblStaging SET tblStaging.FlagExclude = 4
WHERE tblStaging.FlagExclude=0 AND NOT (tblStaging.CLCL_NTWK_IND='I' OR tblStaging.CLCL_NTWK_IND='P' OR tblStaging.PR_PRPR_STS='PA');

我认为 Python 的等价物是

Stage_Maternity_DF.loc[((Stage_Maternity_DF['FlagExclude'] == 0) &
                      (~((Stage_Maternity_DF['CLCL_NTWK_IND'].isin(['I','P'])) |
                        (Stage_Maternity_DF['PR_PRPR_STS'].isin(['PA']))))),
                      'FlagExclude'] = 4

不幸的是,我发现在 Access 中有 CLCL_NTWK_INDPR_PRPR_STS 为空白的条目,它们保持为 FlagExclude = 0。在 pandas/Python 代码中,它设置了 FlagExclude = 4

我知道& 在其他运算符之前被评估,所以我尝试在代码中使用各种不同的括号集,并在.isin 语句中包含'',但它继续评估空白条目以4.

【问题讨论】:

【参考方案1】:

我建议在过滤之前明确处理空白。

例如,在过滤之前考虑以下作为预处理步骤(可能需要针对您的数据类型/值进行更新)

df.fillna(value = 0, inplace = True)

df.replace('Missing', np.nan, inplace=True)

问题.. FlagExclude 条件是否应该在括号内?

,'FlagExclude' = 4]

【讨论】:

尝试做类似的事情(将两列中有空格的行替换为0。仍然不正确。

以上是关于在 python 3.8 中将 Access Logic 转换为 Pandas 的问题的主要内容,如果未能解决你的问题,请参考以下文章

使用 python 3.8+(默认协议=5)时,pickle.load 在 python 3.7 中的(协议=4)对象上失败

在 wix 3.8 中将 wxs 文件添加到 product.wxs 文件

python实现对nginx的access日志的统计

如何在 Access 2010 中将单个字段的所有记录相乘

Pandas Python 程序在 Python3、3.8 但不是 3.6 上运行

如何在 MS Access 2010 中将 ACCDB 转换为 MDB