在 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_IND
或 PR_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 文件