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()
比具体化掩码更简单,但使用显式掩码也很方便