gpt4 book ai didi

python - 要求 pandas 数据帧输入有两个列对或抛出错误

转载 作者:行者123 更新时间:2023-12-01 02:22:34 26 4
gpt4 key购买 nike

我正在编写一个简短的程序,它接受用户输入的 *csv 文件并将其作为 pandas DataFrame 进行操作。

用户必须输入带有必填列的 *csv A1B2 (包括/不包括可选列)或必需列 C3D4 (包括/不包括可选列)。如果A1作为一列存在,则 B2必须作为列存在,否则会引发错误(反之亦然)。与 C3 相同和D4 。用户可以选择任意一对,但他们必须做出选择。

给出一个示例数据框:

import pandas as pd
df = pd.DataFrame("example1.csv")

我可以单独检查列对必须都存在,如下所示,或者使用 pandas:

if df.columns.isin(['A1', 'B2']).any():
raise ValueError("Both A1 and B2 must be included")

或使用 .issubset()如:

if not {'A1', 'B2'}.issubset(df.columns):
raise ValueError("Both A1 and B2 must be included")

我的问题是如何将所有这些条件组合在一起而不创建意大利面条式代码。

如果 A、B、C、D 均未找到,则抛出错误。如果找到,则检查是否有合作伙伴;如果找不到所需的伙伴,则抛出错误...(但如果 A、B、C 存在而 D 不存在,则此操作将失败,而我选择 C ​​来查找配对...)

最佳答案

创建配对列表 -

pairs = {('A1', 'B2'), ('C3', 'D4')}

从你的帖子来看,似乎任何一对存在就足够了。在这种情况下,您可以使用 anyall 的组合来执行此操作 -

if not any(any(x in df for x in p) and all(x in df for x in p) for p in pairs):
raise ValueError("No valid pairs contained in `df`")

这大致可以翻译为:

for p in pairs:
if any(x in df for x in p) and all(x in df for x in p):
break
else:
raise ValueError("No valid pairs contained in `df`")

关于python - 要求 pandas 数据帧输入有两个列对或抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47796932/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com