【发布时间】:2018-05-27 13:46:01
【问题描述】:
我正在编写一个简短的程序,它接受用户输入的 *csv 文件并将其作为 pandas DataFrame 进行操作。
用户必须输入带有必填列A1 和B2(包括/不包括可选列)或必填列C3 和D4(包括/不包括可选列)的*csv。如果A1 作为列存在,则B2 必须作为列存在,否则会引发错误(反之亦然)。与C3 和D4 相同。允许用户选择任何一对,但他们必须选择。
给定一个示例数据框:
import pandas as pd
df = pd.DataFrame("example1.csv")
我可以单独检查列对必须都存在如下,或者使用熊猫:
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 来查找配对...)
【问题讨论】:
-
您的第一种方法没有按您的预期工作。然而,第二个确实如此。
-
一旦满足
if df.columns.isin(['A1', 'B2']).any():语句,如何使用try..except块检查第二列.. -
另外,用户选择什么? CSV 还是列对?他们可以选择 D 或 C 还是只选择 C?
-
@cᴏʟᴅsᴘᴇᴇᴅ 我上面不清楚:用户输入 *csv。他们创建了 *csv。如果他们创建不正确(不包括强制列对),则一定有错误
-
好的。因此,您不知道 CSV 包含哪些对,因此您想检查每个列对。正确的?如果 CSV 有 A 和 B,C 但没有 D,该怎么办?它应该成功还是失败?
标签: python pandas csv conditional