我在数据框中有2列,如下所示:
report pname
D Singapore
N Pradip
A
S Singapore
D
y Europe
我正在对列值进行验证。在列报告中,有效值可以是D,N和A,如果出现其他值,则会产生错误和索引。
但是现在我想同时对两列(报告,pname)执行验证。如果报表的值为D和A,则该列不应为空(空)。如果报表的D和A的列值为null,则应生成错误。
我完成的代码用于一栏验证。
lst=list(df['report'])
lst
lst1=['D','N','A']
def valid_reportype(v, lst):
if v in lst1:
return True
return False
for i, v in enumerate(lst):
if not valid_reportype(v, lst):
print(f"value {v} at index {i} for column Reporting_Type is Invalid")
我的代码只验证了存在D,N,A值的另一列,这会产生错误。
我想同时检查两个列的值D和A是pname列值不能为空的值,如果是则应产生错误。
答案 0 :(得分:1)
为什么不通过pandas
的方式一次获取所有不良条目:
invalid_lines = df[~df['report'].isin(lst1) | (pd.isna(df['pname']) & df['report'].isin(['A', 'D']))]
然后您可以使用以下命令打印它们:
for i in range(len(invalid_lines)):
print("value " + str(invalid_lines.iloc[i, 0]) + " at index " + str(invalid_lines.index[i]) + " for column Reporting_Type is Invalid")