熊猫if语句

时间:2015-02-20 17:14:45

标签: python python-2.7 pandas

我想使用Pandas自动化数据验证过程。这包括两个步骤:

首先要确保每一行都有一个有效的列值。例如,我想在“独立”列中检查该行是否具有1或0,并且如果不是则抛出一个标志。因此,如果Independent == 1或Independent == 0 IndepFlag = 0,则IndepFlag = 1(对于该行)。基于此标志,我想将该行的ID打印到excel文件。

第二个是做类似的事情,但检查多个列(例如,如果Independent == 1和Column2> 1 Column2Flag = 1。

我的问题是,如何检查有效值,然后从具有行ID的列中捕获和打印,以及如何使用多列执行此操作?

1 个答案:

答案 0 :(得分:1)

您可以使用wherehttp://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)

相关问题