我有一个pandas数据帧。
我想收集/打印A列的值,其中B列是NaN。
问题 我该怎么做?
修改 进一步: 假设我有一组列(b,c,d)。 如果b,c或d是NaN,我想选择a列的值。
(识别NaNs的技巧与“==”等有点不同。)
谢谢
答案 0 :(得分:2)
应该非常简单:
In [10]: df
Out[10]:
a b c
0 NaN 9 7
1 1.0 7 6
2 5.0 9 1
3 7.0 4 0
4 NaN 2 3
5 2.0 4 6
6 6.0 3 6
7 0.0 2 7
8 9.0 1 4
9 2.0 9 3
In [11]: df.loc[df['a'].isnull(), 'b']
Out[11]:
0 9
4 2
Name: b, dtype: int32
<强>更新强>
In [166]: df
Out[166]:
a b c
0 NaN 5.0 3
1 7.0 NaN 8
2 4.0 9.0 7
3 8.0 NaN 9
4 3.0 0.0 5
5 NaN 3.0 5
6 9.0 0.0 3
7 0.0 2.0 6
8 7.0 8.0 7
9 1.0 7.0 6
In [163]: df[['a','b']].isnull().any(axis=1)
Out[163]:
0 True
1 True
2 False
3 True
4 False
5 True
6 False
7 False
8 False
9 False
dtype: bool
In [164]: df.loc[df[['a','b']].isnull().any(axis=1)]
Out[164]:
a b c
0 NaN 5.0 3
1 7.0 NaN 8
3 8.0 NaN 9
5 NaN 3.0 5
In [165]: df.loc[df[['a','b']].isnull().any(axis=1), 'c']
Out[165]:
0 3
1 8
3 9
5 5
Name: c, dtype: int32
答案 1 :(得分:0)
您也可以使用np.isnan()
df=
a b
1 Nan 2
2 2 3
3 1 NaN
for i in range(1,4):
if np.isnan(df.loc[i,'a']):
print(df.loc[i,'b'])
out: 2
答案 2 :(得分:0)
也许尝试.fillna()方法来替换你的NaN。 您还可以索引到要处理的特定列,而不是整个数据框。
以下是文档的链接:DataFrame.fillna
In [7]: df
Out[7]:
0 1
0 NaN NaN
1 -0.494375 0.570994
2 NaN NaN
3 1.876360 -0.229738
4 NaN NaN
In [8]: df.fillna(0)
Out[8]:
0 1
0 0.000000 0.000000
1 -0.494375 0.570994
2 0.000000 0.000000
3 1.876360 -0.229738
4 0.000000 0.000000