根据两个列值查找行的位置

时间:2019-10-10 09:37:25

标签: python python-3.x list if-statement python-3.6

我在数据框中有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列值不能为空的值,如果是则应产生错误。

1 个答案:

答案 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")