我想使用Pandas自动化数据验证过程。这包括两个步骤:
首先要确保每一行都有一个有效的列值。例如,我想在“独立”列中检查该行是否具有1或0,并且如果不是则抛出一个标志。因此,如果Independent == 1或Independent == 0 IndepFlag = 0,则IndepFlag = 1(对于该行)。基于此标志,我想将该行的ID打印到excel文件。
第二个是做类似的事情,但检查多个列(例如,如果Independent == 1和Column2> 1 Column2Flag = 1。
我的问题是,如何检查有效值,然后从具有行ID的列中捕获和打印,以及如何使用多列执行此操作?
答案 0 :(得分:1)
您可以使用where
:http://pandas.pydata.org/pandas-docs/dev/indexing.html#the-where-method-and-masking
In [22]: df = pd.DataFrame(dict(Independent=[-1,0,1,4,0], Column2=[0,1,0,2,2]))
In [23]: df
Out[23]:
Column2 Independent
0 0 -1
1 1 0
2 0 1
3 2 4
4 2 0
where
会将不符合条件的值转换为nan
。如果您喜欢使用notnull()
,可以使用astype
获取布尔系列并将其更改为整数:
In [24]: df["IndepFlag"] = df.Independent.where((df.Independent == 0) | (df.Independent == 1)).notnull().astype(int)
In [25]: df
Out[25]:
Column2 Independent IndepFlag
0 0 -1 0
1 1 0 1
2 0 1 1
3 2 4 0
4 2 0 1
然后,您只能选择您感兴趣的行并将其写入excel文件:
In [26]: flagged = df[df.IndepFlag == 1]
In [27]: flagged
Out[27]:
Column2 Independent IndepFlag
1 1 0 1
2 0 1 1
4 2 0 1
In [28]: flagged.to_excel("flagged.xlsx")
使用多列并没有太大差异,只需将where
更改为使用(df.Independent == 0) & (df.Column2 > 1)
。