获取非NaN值的(索引,列)元组
假设我有一个这样的数据表
pd.DataFrame([[1,np.nan,np.nan],[np.nan,np.nan,np.nan],[np.nan,6,np.nan]])
这个函数应该返回一个包含元组的数组:
[(0,0), (2,1)]
1 个回答
5
你可以使用numpy的两个函数,isnan
和where
:
>>> df = pd.DataFrame([[1,np.nan,np.nan],[np.nan,np.nan,np.nan],[np.nan,6,np.nan]])
>>> np.where(~np.isnan(df))
(array([0, 2]), array([0, 1]))
这样就能得到和上面一样的数据:
>>> inds = np.where(~np.isnan(df))
>>> zip(*inds)
[(0, 0), (2, 1)]
如果你用pandas自带的函数,你需要对所有的系列应用notnull()
,然后再对数据框调用一个numpy的函数。
补充:显然,从0.13版本开始,pandas有了一个notnull
函数可以直接用于数据框,如果你愿意,可以把所有的~np.isnan(df)
替换成df.notnull()
。