我想确保当A列为NULL(在csv中)或NaN(在数据帧中)时,B列为“现金”。
我试过这个:
check = df[df['A'].isnull()]['B']
check = check.to_string(index=False)
if "Cash" not in check:
print "Column A Fail"
else:
print "Column A Pass!"
但它没有用。
有什么建议吗?
我还需要确保它不会将'0'视为NaN
答案 0 :(得分:3)
使用loc
指定A
为空的位置。
df.loc[df['A'].isnull(), 'B'] = 'Cash'
示例
df = pd.DataFrame(dict(
A=[np.nan, 1, 2, np.nan],
B=['a', 'b', 'c', 'd']
))
print(df)
A B
0 NaN a
1 1.0 b
2 2.0 c
3 NaN d
然后做
df.loc[df['A'].isnull(), 'B'] = 'Cash'
print(df)
A B
0 NaN Cash
1 1.0 b
2 2.0 c
3 NaN Cash
检查所有B
是否'Cash'
A
为空*
(df.loc[df.A.isnull(), 'B'] == 'Cash').all()
答案 1 :(得分:3)
<强>更新强>
我的目标不是分配“现金”,而是要确保它是“现金”。 已作为质量检查
In [40]: df
Out[40]:
A B
0 NaN a
1 1.0 b
2 2.0 c
3 NaN Cash
In [41]: df.query("A != A and B != 'Cash'")
Out[41]:
A B
0 NaN a
或使用布尔索引:
In [42]: df.loc[df.A.isnull() & (df.B != 'Cash')]
Out[42]:
A B
0 NaN a
OLD回答:
替代解决方案:
In [23]: df.B = np.where(df.A.isnull(), 'Cash', df.B)
In [24]: df
Out[24]:
A B
0 NaN Cash
1 1.0 b
2 2.0 c
3 NaN Cash
另一种解决方案:
In [31]: df = df.mask(df.A.isnull(), df.assign(B='Cash'))
In [32]: df
Out[32]:
A B
0 NaN Cash
1 1.0 b
2 2.0 c
3 NaN Cash
答案 2 :(得分:1)
根据逻辑规则,P =&gt; Q是(非P)或Q.所以
(~df.A.isnull()|(df.B=="Cash")).all()
检查所有行。