如何获取 Pandas 数据框中所有非 NaN 项的行、列索引
How to get row, column indices of all non-NaN items in Pandas dataframe
我如何像下面这样遍历数据框和 return 非 NaN 值位置作为元组。即
df:
0 1 2
0 NaN NaN 1
1 1 NaN NaN
2 NaN 2 NaN
我会得到 [(0, 1), (2, 0), (1, 2)] 的输出。最好的方法是做一个嵌套的for循环吗?或者有没有更简单的方法我不知道通过 Pandas.
假设您不需要顺序,您可以堆叠非空值并处理索引值。
In [26]: list(df[df.notnull()].stack().index)
Out[26]: [(0L, '2'), (1L, '0'), (2L, '1')]
In [27]: df[df.notnull()].stack().index
Out[27]:
MultiIndex(levels=[[0, 1, 2], [u'0', u'1', u'2']],
labels=[[0, 1, 2], [2, 0, 1]])
此外,使用堆栈方法,NaN
无论如何都会被忽略。
In [28]: list(df.stack().index)
Out[28]: [(0L, '2'), (1L, '0'), (2L, '1')]
获取非空位置:
import numpy as np
>>> np.argwhere(df.notnull().values).tolist()
[[0, 2], [1, 0], [2, 1]]
如果你真的想要它们作为元组对,只需使用列表理解:
>>> [tuple(pair) for pair in np.argwhere(df.notnull().values).tolist()]
[(0, 2), (1, 0), (2, 1)]
获取空位置:
>>> np.argwhere(df.isnull().values).tolist()
[[0, 0], [0, 1], [1, 1], [1, 2], [2, 0], [2, 2]]
直接方式:
list(zip(*np.where(df.notnull())))
为了
[(0, 2), (1, 0), (2, 1)]
我如何像下面这样遍历数据框和 return 非 NaN 值位置作为元组。即
df:
0 1 2
0 NaN NaN 1
1 1 NaN NaN
2 NaN 2 NaN
我会得到 [(0, 1), (2, 0), (1, 2)] 的输出。最好的方法是做一个嵌套的for循环吗?或者有没有更简单的方法我不知道通过 Pandas.
假设您不需要顺序,您可以堆叠非空值并处理索引值。
In [26]: list(df[df.notnull()].stack().index)
Out[26]: [(0L, '2'), (1L, '0'), (2L, '1')]
In [27]: df[df.notnull()].stack().index
Out[27]:
MultiIndex(levels=[[0, 1, 2], [u'0', u'1', u'2']],
labels=[[0, 1, 2], [2, 0, 1]])
此外,使用堆栈方法,NaN
无论如何都会被忽略。
In [28]: list(df.stack().index)
Out[28]: [(0L, '2'), (1L, '0'), (2L, '1')]
获取非空位置:
import numpy as np
>>> np.argwhere(df.notnull().values).tolist()
[[0, 2], [1, 0], [2, 1]]
如果你真的想要它们作为元组对,只需使用列表理解:
>>> [tuple(pair) for pair in np.argwhere(df.notnull().values).tolist()]
[(0, 2), (1, 0), (2, 1)]
获取空位置:
>>> np.argwhere(df.isnull().values).tolist()
[[0, 0], [0, 1], [1, 1], [1, 2], [2, 0], [2, 2]]
直接方式:
list(zip(*np.where(df.notnull())))
为了
[(0, 2), (1, 0), (2, 1)]