如果在任何其他列中都有对应的NaN,如何非迭代地将NaN放置在DataFrame列中?

2024-09-30 04:36:09 发布

您现在位置:Python中文网/ 问答频道 /正文

给定一个3列数据帧,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]

对于任何其他colunn中存在NaN的每一行,我想在c列中放置一个NaN。我目前的做法如下:

for col in df:
    df['c'][pd.np.isnan(df[col])] = pd.np.nan

我强烈怀疑有一种方法可以通过逻辑索引来实现这一点,而不是像我目前所做的那样遍历列。你知道吗

这怎么可能呢?你知道吗

谢谢你!你知道吗


Tags: columns数据infalsetruedffornp
3条回答
df.c[df.ix[:, :'c'].apply(lambda r: any(r.isnull()), axis=1)] = np.nan

请注意,您可能需要将列c的类型更改为float,否则将出现无法将nan分配给integer列的错误。你知道吗

筛选并选择具有NaN的行作为“a”或“b”,并将“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]

如果你不关心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]

相关问题 更多 >

    热门问题