[英]How can I non-iteratively place a NaN in a DataFrame column if there is a corresponding NaN in any other columns?
給定一個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
存在於任何其他colunn。 我當前的方法如下:
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]
df.c[df.ix[:, :'c'].apply(lambda r: any(r.isnull()), axis=1)] = np.nan
請注意,您可能需要將列c
的類型更改為float,否則將收到有關無法將nan
分配給整數列的錯誤。
篩選並選擇您具有“ a”或“ b”的NaN
的行,並將“ c”分配給NaN
:
In [18]:
df.ix[pd.isnull(df.a) | pd.isnull(df.b),'c'] = NaN
In [19]:
df
Out[19]:
a b c
0 NaN a NaN
1 1 b 1
2 2 c 0
3 3 d 0
4 4 NaN NaN
[5 rows x 3 columns]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.