【问题标题】:Issue translating Access Logic to Pandas in python 3.8在 python 3.8 中将 Access Logic 转换为 Pandas 的问题
【发布时间】: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.

【问题讨论】:

    标签: python pandas ms-access logic legacy-code


    【解决方案1】:

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

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

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

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

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

    ,'FlagExclude' = 4]
    

    【讨论】:

    • 尝试做类似的事情(将两列中有空格的行替换为0。仍然不正确。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-26
    • 2021-04-19
    • 2021-01-08
    • 1970-01-01
    • 2016-05-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多