【发布时间】: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_IND 或 PR_PRPR_STS 为空白的条目,它们保持为 FlagExclude = 0。在 pandas/Python 代码中,它设置了 FlagExclude = 4。
我知道& 在其他运算符之前被评估,所以我尝试在代码中使用各种不同的括号集,并在.isin 语句中包含'',但它继续评估空白条目以4.
【问题讨论】:
标签: python pandas ms-access logic legacy-code