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)
。
我想使用 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)
。