[英]How to mark DataFrame rows with nan in any column
我想使用带有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
(本质上是一个集合交集),以确定哪些时间戳或行在所有列中都具有有效数据(non- nan
)。 我可以认为以下是可能的解决方案:
valid_mask = [np.all(~np.isnan(x)) for x in ab_df.values]
但是似乎有点神秘,使用DataFrame
方法是否有更好的方法?
还有一种将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()
而不是使用df.dropna()
更简单,但是使用显式遮罩也很方便。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.