3

np.nan == False および正の実数値 == True であるブール値を持つ DataFrame を作成したいと思います。

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) # Does not work
DF.where(DF.isnull() == False) # Does not work
DF[DF.isnull() == False] # Does not work
4

3 に答える 3

2

奇妙ですが、地滑りによって- np.isnan(df)パフォーマンスが優れているように見えます。pd.notnull(df)

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 loops, best of 3: 159 us per loop

In [6]: %timeit pd.notnull(df)
1000 loops, best of 3: 1.22 ms per loop
于 2013-02-25T06:55:52.350 に答える
2

isnullnotと呼ばれる便利な関数があります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
于 2013-02-25T10:29:33.630 に答える
0

dfのnotnull()とisnan()をいくつかの不正なフォーマットと比較します。

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ループ、ベスト3:ループあたり632 us

%%timeit
legit_dexes = pd.notnull(df)

1000ループ、ベスト3:ループあたり751 us

不正な形式の列を無視するこのバリエーションも同様です。

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

1000ループ、ベスト3:ループあたり681 us

于 2013-02-26T18:32:48.800 に答える