Python 如何在任何列中用nan标记数据帧行

Python 如何在任何列中用nan标记数据帧行,python,numpy,pandas,Python,Numpy,Pandas,我想使用带有DatetimeIndex的DataFrame来对齐时间戳上不同集合(列)的数据。每个数据集可以具有重叠和不重叠的时间戳。举个简单的例子 import pandas as pd N = 5 ts_idx1 = pd.date_range('2015-05-22 15:00:00', periods=N, freq='10S') a = pd.DataFrame(np.random.randn(5), index=ts_idx1, columns=['a']) ts_idx2 =

我想使用带有
DatetimeIndex
DataFrame
来对齐时间戳上不同集合(列)的数据。每个数据集可以具有重叠和不重叠的时间戳。举个简单的例子

import pandas as pd

N = 5
ts_idx1 = pd.date_range('2015-05-22 15:00:00', periods=N, freq='10S')
a = pd.DataFrame(np.random.randn(5), index=ts_idx1, columns=['a'])

ts_idx2 = pd.date_range('2015-05-22 15:00:20', periods=N, freq='10S')
b = pd.DataFrame(np.random.randn(5), index=ts_idx2, columns=['b'])

ab_df = a.join(pd.DataFrame(b, columns=['b']), how='outer')
ab_df
可能看起来像这样

                           a           b
2015-05-22 15:00:00    0.293741          nan
2015-05-22 15:00:10   -0.799414          nan
2015-05-22 15:00:20    0.361964    -0.403397
2015-05-22 15:00:30   -0.932385    -0.070403
2015-05-22 15:00:40   -0.702407     0.819322
2015-05-22 15:00:50         nan    -0.771400
2015-05-22 15:01:00         nan    -0.915791
是否有一种快速方法可以确定任何
DataFrame
列是否包含
nan
(基本上是一个集合交叉点),以确定哪些是所有列中具有有效数据(非
nan
)的时间戳或行。我可以考虑以下可能的解决方案:

valid_mask = [np.all(~np.isnan(x)) for x in ab_df.values]

但这似乎有点神秘,有没有更好的方法使用
数据帧
方法?

有一种更为自然的方法将
notnull
all
结合起来:

>>> df.notnull().all(axis=1)
2015-05-22 15:00:00    False
2015-05-22 15:00:10    False
2015-05-22 15:00:20     True
2015-05-22 15:00:30     True
2015-05-22 15:00:40     True
2015-05-22 15:00:50    False
2015-05-22 15:01:00    False
dtype: bool
>>> [np.all(~np.isnan(x)) for x in df.values]
[False, False, True, True, True, False, False]
有时使用
df.dropna()
比具体化掩码更简单,但使用显式掩码也很方便