检索非nan值的(索引,列)元组

时间:2014-03-12 19:17:39

标签: python numpy pandas

假设我有这个数据框

pd.DataFrame([[1,np.nan,np.nan],[np.nan,np.nan,np.nan],[np.nan,6,np.nan]])

该函数应该返回元组数组:

 [(0,0), (2,1)]

1 个答案:

答案 0 :(得分:3)

您可以使用numpy函数isnanwhere

>>> 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函数调用到DataFrame。

修改:显然,pandas在0.13中有一个notnull DataFrames函数,如果愿意,你可以用~np.isnan(df)替换所有df.notnull()