3 Stimmen

Gib ein boolesches DataFrame zurück

Ich möchte ein DataFrame mit Booleschen Werten erstellen, bei dem np.nan == False ist und jeder positive reale Wert == True ist.

import numpy as np
import pandas as pd
DF = pd.DataFrame({'a':[1,2,3,4,np.nan],'b':[np.nan,np.nan,np.nan,5,np.nan]})

DF.apply(bool) # Funktioniert nicht
DF.where(DF.isnull() == False) # Funktioniert nicht
DF[DF.isnull() == False] # Funktioniert nicht

2voto

root Punkte 73542

Seltsam, aber es sieht so aus, als ob - np.isnan(df) pd.notnull(df) um Längen übertrifft:

In [1]: import pandas as pd

In [2]: import numpy as np

In [3]: df = pd.DataFrame({'a':[1,2,3,4,np.nan],'b':[np.nan,np.nan,np.nan,5,np.nan]})

In [4]: - np.isnan(df)
Out[4]: 
       a      b
0   True  False
1   True  False
2   True  False
3   True   True
4  False  False

In [5]: %timeit - np.isnan(df)
10000 Schleifen, bester von 3: 159 us pro Schleife

In [6]: %timeit pd.notnull(df)
1000 Schleifen, bester von 3: 1,22 ms pro Schleife

2voto

Andy Hayden Punkte 324102

Es gibt eine Komfortfunktion für nicht isnull genannt notnull:

In [11]: pd.notnull(df)
Out[11]: 
       a      b
0   True  False
1   True  False
2   True  False
3   True   True
4  False  False

0voto

radikalus Punkte 555

Vergleich von notnull() und isnan() auf einem DataFrame mit einigen Formatierungsfehlern:

df = pd.DataFrame({'a':[1,2,3,4,np.nan],'b':[np.nan,np.nan,np.nan,5,np.nan],'c':['fish','bear','cat','dog',np.nan]})

%%timeit
legit_dexes =  np.isnan(df[df<=""].astype(float)) == False

1000 Durchläufe, bester von 3: 632 us pro Durchlauf

%%timeit
legit_dexes = pd.notnull(df)

1000 Durchläufe, bester von 3: 751 us pro Durchlauf

Diese Variation, die fehlerhafte Spalten ignoriert, ist ebenfalls ähnlich:

%%timeit
legit_dexes = np.isnan(df[df.columns[df.apply(lambda x: not np.any(x.values>=""))]]) == False

1000 Durchläufe, bester von 3: 681 us pro Durchlauf

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X