In [3]: import numpy as np
In [4]: b = pd.DataFrame(np.array([
...: [1,np.nan,3,4],
...: [np.nan, 4, np.nan, 4]
...: ]))
In [13]: b
Out[13]:
0 1 2 3
0 1.0 NaN 3.0 4.0
1 NaN 4.0 NaN 4.0
我想找到Nan
值存在的列名和索引。
例如,“b
在[{1}},NaN
,index 0, col1
处有index 0, col0
值。
我尝试了什么:
1
index 1 col2
=>我不知道为什么它会显示In [14]: b[b.isnull()]
Out[14]:
0 1 2 3
0 NaN NaN NaN NaN
1 NaN NaN NaN NaN
填充DataFrame
2
NaN
=>它仅显示In [15]: b[b[0].isnull()]
Out[15]:
0 1 2 3
1 NaN 4.0 NaN 4.0
中存在DataFrame
值的Nan
的一部分。
我怎么能
答案 0 :(得分:3)
您可以使用np.where
查找pd.isnull(b)
为True的索引:
import numpy as np
import pandas as pd
b = pd.DataFrame(np.array([
[1,np.nan,3,4],
[np.nan, 4, np.nan, 4]]))
idx, idy = np.where(pd.isnull(b))
result = np.column_stack([b.index[idx], b.columns[idy]])
print(result)
# [[0 1]
# [1 0]
# [1 2]]
或使用DataFrame.stack
通过将列标签移动到索引中来重新整形DataFrame。
这会创建一个True,其中b
为null:
mask = pd.isnull(b).stack()
# 0 0 False
# 1 True
# 2 False
# 3 False
# 1 0 True
# 1 False
# 2 True
# 3 False
然后从MultiIndex中读取行和列标签:
print(mask.loc[mask])
# 0 1 True
# 1 0 True
# 2 True
# dtype: bool
print(mask.loc[mask].index.tolist())
# [(0, 1), (1, 0), (1, 2)]