获取非NaN值的(索引,列)元组

1 投票
1 回答
1203 浏览
提问于 2025-04-17 22:00

假设我有一个这样的数据表

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的两个函数,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的函数。

补充:显然,从0.13版本开始,pandas有了一个notnull函数可以直接用于数据框,如果你愿意,可以把所有的~np.isnan(df)替换成df.notnull()

撰写回答