簡體   English   中英

如果其他任何列中都有對應的NaN,如何將NaN迭代地放置在DataFrame列中?

[英]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]

我想放置NaNc對於其中的每一行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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM