给定一个 3 列的 DataFrame,df:
a b c
0 NaN a True
1 1 b True
2 2 c False
3 3 NaN False
4 4 e True
[5 rows x 3 columns]
我想在任何其他列中存在 NaN 的每一行的 c 列中放置一个NaN。我目前的做法如下:
for col in df:
df['c'][pd.np.isnan(df[col])] = pd.np.nan
我强烈怀疑有一种方法可以通过逻辑索引来完成此操作,而不是像我目前正在做的那样遍历列。
这是怎么做到的?
谢谢!
请您参考如下方法:
如果你不关心bool/float的问题,我建议:
>>> df.loc[df.isnull().any(axis=1), "c"] = np.nan
>>> df
a b c
0 NaN a NaN
1 1 b 1
2 2 c 0
3 3 NaN NaN
4 4 e 1
[5 rows x 3 columns]
如果你真的这样做了,那么从你的框架 df 重新开始你可以:
>>> df["c"] = df["c"].astype(object)
>>> df.loc[df.isnull().any(axis=1), "c"] = np.nan
>>> df
a b c
0 NaN a NaN
1 1 b True
2 2 c False
3 3 NaN NaN
4 4 e True
[5 rows x 3 columns]
