从第二列替换列中的NaN值

2024-09-27 21:31:12 发布

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

我想用相应的Node值替换Target中的NaN值。 我的数据是:

 Node  Target   Color
node1   node7   Red
node1   node9   Red
node3   node5   Green
node1   node3   Red
node3   node1   Red
node5   NaN     Yellow

我需要:

   Node  Target     Color
    node1   node7   Red
    node1   node9   Red
    node3   node5   Green
    node1   node3   Red
    node3   node1   Red
    node5   node5   Yellow # here the replacement

我认为一个可能的解决方案是使用if语句检查节点的Target是否等于NaN:如果是,则可以将自身指定为目标


Tags: the数据nodetargetheregreenrednan
1条回答
网友
1楼 · 发布于 2024-09-27 21:31:12

是的,^{}将允许value(替换)参数是一个系列(列),而不仅仅是一个常量:

df['Target'] = df['Target'].fillna(df['Node'])

注意,这比if…else逻辑要好,因为它对整个数据帧执行一个矢量化赋值,如下面的测试用例所示


  1. 或者,如果df.fillna()不允许我们这样做:

您还可以在感兴趣的列上使用^{},其中,df.where(... other)arg是您的替换列,df['Node']

df['Target'] = df['Target'].where(df['Target'].notna(), df['Node'])

还要注意我们如何使用逻辑索引,使用df['Target'].notna()获得目标为/非NA的行的掩码/逻辑向量

更好的测试用例:

import pandas as pd
from io import StringIO

df = """ Node  Target   Color
node1   node7   Red
node1   node9   Red
node2   NaN     Brown
node3   node5   Green
node1   node3   Red
node3   node1   Red
node5   NaN     Yellow"""

df = pd.read_csv(StringIO(df), sep=r'\s+')

相关问题 更多 >

    热门问题