当列A为空时 - Python,确保列B =某个值

时间:2017-01-23 19:40:24

标签: python pandas numpy

我想确保当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

3 个答案:

答案 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()

检查所有行。