Pandas 如果语句

Pandas if statements

我想使用 Pandas 自动执行数据验证过程。这涉及两个步骤:

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

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

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

您可以使用 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。如果您喜欢使用 astype:

,您可以使用 notnull() 获取布尔系列并将其更改为整数
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

然后您可以 select 只有您感兴趣的行并将它们写入 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)