2017-01-23 4 views
2

Ich möchte sicherstellen, dass, wenn Spalte A NULL (in CSV) oder NaN (in Datenrahmen) ist Spalte B "Cash" ist.Stellen Sie sicher, dass Spalte B = ein bestimmter Wert ist, wenn Spalte A Null ist - Python

Ich habe dies versucht:

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!" 

Aber es funktioniert nicht.

irgendwelche Vorschläge?

Ich muss auch darauf achten, dass es nicht behandeln ‚0‘ als NaN

Antwort

3

Verwenden loc zuweisen, wo A null ist.

df.loc[df['A'].isnull(), 'B'] = 'Cash' 

Beispiel

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 

tun Dann

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 

überprüfen, ob alle 0.123.sind 'Cash' wo A null * ist

(df.loc[df.A.isnull(), 'B'] == 'Cash').all() 
+0

Vielen Dank für die schnelle Antwort! Mein Ziel ist es nicht, "Cash" zuzuweisen, sondern um sicherzustellen, dass es bereits als Qualitätscheck vorliegt. –

+0

@NazariyKurdoba Ich habe meinen Beitrag aktualisiert. – piRSquared

3

UPDATE:

mein Ziel ist es nicht 'Cash' zuweisen, sondern um sicherzustellen, dass es bereits dort als Qualitätsprüfung ist

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 

oder mit boolean indexin g:

In [42]: df.loc[df.A.isnull() & (df.B != 'Cash')] 
Out[42]: 
    A B 
0 NaN a 

ALTE Antwort:

Alternative Lösung:

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 

eine andere Lösung:

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

Vielen Dank für die schnelle Antwort! Mein Ziel ist es nicht "Cash" zuzuweisen, sondern um sicherzustellen, dass es bereits als Qualitätscheck –

+0

@NazariyKurdoba vorhanden ist, also möchten Sie diejenigen Zeilen auswählen, die diese Bedingung nicht erfüllen - richtig? – MaxU

1

Nach logischen Regeln, P => Q (nicht P) oder Q. So

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

Überprüfen Sie alle Zeilen.

Verwandte Themen