2017-01-23 32 views
2

我想確保當列A爲NULL(以csv)或NaN(以數據框形式)時,列B爲「現金」。當列A爲空時,確保列B =特定值 - Python

我已經試過這樣:

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

使用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() 
+0

感謝您的快速響應!我的目標不是分配'現金',而是要確保它已經作爲質量檢查 –

+0

@NazariyKurdoba我已更新我的帖子。 – piRSquared

3

UPDATE:

我的目標是不分配「現金」,而是要確保它的 已經存在的質量檢查

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 

,或者使用布爾indexin G:

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 
+0

感謝您的快速響應!我的目標不是分配'現金',而是爲了確保它已經在那裏作爲質量檢查 –

+0

@NazariyKurdoba,所以你想選擇那些__不滿足這種條件的行 - 對吧? – MaxU

1

根據邏輯規則,P => Q是(未P)或Q.所以

(~df.A.isnull()|(df.B=="Cash")).all() 

檢查所有行。

相關問題